LeetCode Notes_#203_移除链表元素

LeetCode Notes_#203_移除链表元素

Contents

题目

删除链表中等于给定值 val 的所有节点。
示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

思路分析

循环遍历链表,遇到val就删除。注意两点:

  1. 第一个节点需要被删除的情况。引入哑节点。
  2. 删除操作需要有删除节点的前一个节点的指针,所以维护一个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),只用到了一些指针,还有一个哑节点

posted @ 2020-08-20 17:01  Howfar's  阅读(87)  评论(0编辑  收藏  举报