题目链接:
题目描述:
#203. 移除链表元素
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
通过次数92,417 提交次数201,211
分析:
本题是道简单题,但是想一次就A还是有点儿不容易的。
需要注意的有以下几点:
- 要做删除操作,需要找到的是被删节点的前一个节点,这样只需让
i.next = i.next.next
,就可以达到删除元素的目的; - 头结点
head
也可能是被删节点,所以返回head
是不行的,此时一般的做法是创建一个伪节点dummy
,dummy
的下一个指向头节点head
,只需要返回dummy.next
; - 链表的题要自己动手画下来,思绪不清晰时容易各种空指针,不只针对该题。
代码及提交截图:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
/*
* 两点注意:
* 要做删除操作,需要找到的是被删节点的前一个节点;
* 头结点 head 也可能是被删节点,所以返回的不一定是 head
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head == null) return null;
ListNode dummy = new ListNode(-1);// dummy 伪节点,指向头结点 head
ListNode i = dummy;
dummy.next = head;
while(i != null && i.next != null){//为了方便删除操作,找的是被删节点的前一个
if(i.next.val == val){
i.next = i.next.next;
}else{
i = i.next;
}
}
return dummy.next;
}
}