题目描述
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
分析
输入:链表节点 head
输出:删除节点后的头节点
解题思路
我们要删除一个节点的方法是找到它前一个节点,然后:
cur.next = cur.next
通过改变指针来达到删除的目的。
因此我们要做的是先找到前一个节点。对于删除 head 的情况,我们需要特殊处理,所以我们用 dummyHead 来省掉一步边界条件的判断。
代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var deleteNode = function (head, val) {
const dummyHead = new ListNode(null, head)
let cur = dummyHead
while (cur && cur.next && val !== cur.next.val) {
cur = cur.next
}
cur.next = (cur.next && cur.next.next) || null
return dummyHead.next
}
复杂度
时间:O(N), 遍历每一个节点
空间:O(1),只需要一个节点作为开头