zoukankan      html  css  js  c++  java
  • 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),只用到了一些指针,还有一个哑节点

  • 相关阅读:
    numpy 矩阵和数组
    python map()
    python matplotlib plot
    python mean()
    预测数值型数据:回归
    散点图
    非均衡分类问题
    AdaBoost元算法
    2.1 n元排列
    1.3 数域
  • 原文地址:https://www.cnblogs.com/Howfars/p/13536124.html
Copyright © 2011-2022 走看看