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)。

    参考链接:

    官方题解

    代码随想录

  • 相关阅读:
    requests实现接口自动化(三)
    api 25 PopupWindow会占据整个屏幕
    INSTALL_FAILED_USER_RESTRICTED
    事件分发_水平滑动和垂直冲突解决
    MPAndroidChart market右边显示不全问题
    SimpleDateFormat 取当前周的周一和周日的日期,当前月第一个和最后一天的日期
    Callable,Runnable比较及用法
    Android系统启动流程
    debug-stripped.ap_' specified for property 'resourceFile' does not exist
    Theme.AppCompat.Light的解决方法
  • 原文地址:https://www.cnblogs.com/wltree/p/15497365.html
Copyright © 2011-2022 走看看