LeetCode Notes_#203_移除链表元素
Contents
题目
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
思路分析
循环遍历链表,遇到val
就删除。注意两点:
- 第一个节点需要被删除的情况。引入哑节点。
- 删除操作需要有删除节点的前一个节点的指针,所以维护一个
pre
指针,跟cur
一起向后遍历。注意pre
指针在cur
被删除后,不必更新。
解答
class Solution {
public ListNode removeElements(ListNode head, int val) {
//引入哑节点可以方便删除第一个节点
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode cur = dummyHead.next;
ListNode pre = dummyHead;
while(cur != null){
//如果删除了cur,pre就不动
if(cur.val == val){
pre.next = pre.next.next;
}
//没有删除cur,pre后移
else pre = pre.next;
cur = cur.next;
}
return dummyHead.next;
}
}
复杂度分析
时间复杂度:O(n)
,遍历链表一次
空间复杂度:O(1)
,只用到了一些指针,还有一个哑节点