algorithm-camp
algorithm-camp copied to clipboard
203 . 移除链表元素
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
https://leetcode-cn.com/problems/remove-linked-list-elements/
var removeElements = function (head, val) {
let newHead = new ListNode(null),
curr = head,
prev = newHead;
newHead.next = head;
while (curr) {
if (curr.val === val) {
prev.next = curr.next;
curr = prev.next;
}
else {
prev = curr;
curr = curr.next;
}
}
return newHead.next;
};
var removeElements = function(head, val) { // 空的head节点,规避if else let ele = { next:head } let cur = ele while(cur.next){ if(cur.next.val===val){ cur.next = cur.next.next }else{ cur = cur.next } } return ele.next };
哨兵节点的概念有点模糊,老师可以讲一下吗
null 1 2 6 3 4 5 6
prev curr
null 1 2 6 3 4 5 6
prev curr
null 1 2 6 3 4 5 6
prev curr
null 1 2 3 4 5 6
prev curr
var removeElements = function (head, val) {
// 创建一个初始头节点
let node = new ListNode(null)
let prev = node
let curr = head
node.next = head
while (curr) {
if (curr.val === val) {
prev.next = curr.next
// 释放删除节点内存
curr.next = null
curr = prev.next
} else {
prev = curr
curr = curr.next
}
}
return node.next
};