LeetCode-移除链表元素
LeetCode刷题笔记
LeetCode题库:https://leetcode-cn.com/problemset/all/
移除链表元素
给定链表表头head
和一个整数val
,删除链表中所有满足Node.val === val
的结点,并返回新的头节点
给定链表
function ListNode(val, next) {
this.val = (val === undefined ? 0 : val);
this.next = (next === undefined ? null : next);
}
var list = function(arr) {
var head = null;
for (var i = arr.length - 1; i >= 0; i--) {
head = new ListNode(arr[i], head);
}
return head;
};
const l = list([1,2,6,3,4,5,6]);
实现思路
遍历整个链表,并记录上一个结点,当发现满足条件的结点时:
- 判断此结点是否为头节点,如果是则将头节点指向第二个结点
- 其余结点的移除,通过
last
的next
指向当前结点的next
的方式实现
代码实现
var removeElements = function(head, val) {
var last = null; // 记录上一个结点
var node = head;
// 开始遍历链表
while (node !== null) {
// 发现满足条件的结点
if (node.val === val) {
if (last === null) {
// 删除头结点
var tmp = node;
head = tmp.next;
node = node.next;
continue;
} else {
// 其余结点
last.next = node.next;
node = last;
continue;
}
}
last = node; // 记录此结点,即下一次遍历的上一个结点
node = node.next;
}
return head;
};
运行结果
执行用时 | 内存消耗 |
---|---|
104 ms | 42.7 MB |