题目
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
大致意思
给你一个链表,和一个val,把这个链表中与给定val相同的节点干掉
解决方案
- 首先,需要遍历整个链表
- 在每次遍历时,需要记录上一个节点是什么,在找到需要干掉的节点时候,进行上下的拼接
- 当出现链表的第一个就是需要被干掉的时候,直接进行
head = head.next
的操作 - 当
node.val === val
的时候,pre.next = node.next
,这个时候不要去改变pre
,因为下一个节点可能也是需要被干掉的节点 - 如果不需要干掉,
pre = node
,然后node继续遍历node = node.next
- 当出现链表的第一个就是需要被干掉的时候,直接进行
源代码
var removeElements = function(head, val) {
if (!head) return head;
var node = head;
var pre;
while (node) {
if (node.val === val) {
if (!pre) {
head = head.next;
} else {
pre.next = node.next;
}
} else {
pre = node;
}
node = node.next;
}
return head;
};