zoukankan      html  css  js  c++  java
  • 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)。

    参考链接:

    官方题解

    代码随想录

  • 相关阅读:
    小村系列之十八:幸福的桥
    小村系列之十六:改革的石头
    获取<select>,<radio>,<checkbox>中未被选中的value值和被选中的value值
    display:inline-block,block,inline的区别与用法
    Java中List Set Map集合的遍历
    C#自定义List类
    C#获取文件和文件夹大小
    C# winform带进度条的图片下载
    C#委托的详细使用
    asp.net cookie和session的详细使用
  • 原文地址:https://www.cnblogs.com/wltree/p/15497365.html
Copyright © 2011-2022 走看看