删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
这道题和剑指offer第18题类似,但是比剑指offer题目要难一点,多一个的难点就是删除的元素可能存在多个,那么就不能再删除之后立马break,并且在一开始左剑指offer 18题的时候,有个地方没有完善,导致之后直接挪到203题的时候,就不能得出正确结果。那就是在找到一个目标节点之后,还执行node = node.next
,如果执行这一步,在一种特殊情况下就不能得出正确结果——[1,1] 1,删除第一个1之后,node右移,直接退出。
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode node = dummy;
while (node != null && node.next != null) {
if (node.next.val == val) {
node.next = node.next.next;
} else {
node = node.next;
}
}
return dummy.next;
}
}