• 203.移除链表元素


    203.移除链表元素

    题目链接:203. 移除链表元素(简单)

    题目描述

    给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

    示例 1:

    输入:head = [1,2,6,3,4,5,6], val = 6
    输出:[1,2,3,4,5]

    示例 2:

    输入:head = [], val = 1
    输出:[]

    示例 3:

    输入:head = [7,7,7,7], val = 7
    输出:[]

    提示:

    列表中的节点数目在范围 [0, 104] 内
    1 <= Node.val <= 50
    0 <= val <= 50

    题解

    思路:这道题需要弄清楚链表的基本操作原理

    代码(C++版本):

    注意:有头节点时,首元节点与非首元节点的操作一致;无头节点时,首元节点与非首元节点的操作不一样。

    //对于没有头节点的链表来说,对 首元节点 与 其他节点 的操作是不一样的
    ListNode* removeElements(ListNode* head, int val) {
       ListNode* p = head;//用于遍历head的所有节点
       //首元节点
       while (head != NULL && head->val == val) {
           head = head->next;
           delete p;
           p = head;
      }
       //非首元节点
       while (p != NULL && p->next != NULL) {
           ListNode* dp = p->next;//用于寻找将被删除的节点
           if (dp->val != val) {
               p = p->next;
          }
           else if (dp->val == val) {
               p->next = dp->next;
               delete dp;
          }
      }
       return head;
    }

    //对于有头节点的链表来说,对 首元节点 与 其他节点 的操作是一样的
    ListNode* removeElements1(ListNode* head, int val) {
       //首先添加一个头节点,使首元节点的操作同非首元节点的操作一致
       ListNode* hp = new ListNode(0);//头节点
       //将头节点插入到链表当中
       hp->next = head;
       head = hp;

       ListNode *p = head;//用于遍历head的所有节点

       while (p != NULL && p->next != NULL) {
           ListNode* dp = p->next;//用于寻找将被删除的节点
           if (dp->val != val) {
               p = p->next;
          }
           else if (dp->val == val) {
               p->next = dp->next;
               delete dp;
          }
      }

       //将头节点移除
       head = hp->next;
       delete hp;

       return head;
    }

    分析:

    • 时间复杂度:O(n),需要遍历链表一次。

    • 空间复杂度:O(1)。

    参考链接:

    官方题解

    代码随想录

  • 相关阅读:
    OpenCV-Python 霍夫直线检测-HoughLinesP函数参数
    2017 年度读书总结
    检查服务是否正在运行,如果未运行则启动
    添加MIME类型
    IIS功能查看、配置
    IIS下的身份验证方式管理
    PowerShell管理IIS(新建站点、应用程序池、应用程序、虚拟目录等)
    虚拟目录和应用程序的区别
    远程重启服务器
    逐行读取txt
  • 原文地址:https://www.cnblogs.com/wltree/p/15497365.html
Copyright © 2020-2023  润新知