首页 > 其他分享 >移除链表元素

移除链表元素

时间:2024-07-26 18:29:40浏览次数:18  
标签:pre head ListNode val 元素 virtual next 链表 移除

这里注意我们操作链表的时候都要使用临时指针来进行遍历链表的操作,不然会改变链表的原始数据,这里我使用两种方式来进行删除的操作

原链表删除元素

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        // if(head==null){
        //     return head;
        // }
        while(head!=null && head.val==val){
            head=head.next;
        }
        ListNode pre=head;
        
        while(pre!=null && pre.next!=null){
            if(pre.next.val==val){
                pre.next=pre.next.next;
            }else{
                pre=pre.next;
            }
            
        }
        return head;
    }
}

使用虚拟头节点(推荐,代码较为统一)

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummyhead=new ListNode(0);
        dummyhead.next=head;
        ListNode virtual=dummyhead;
        // virtual.next=head;
        while(virtual.next!=null &&virtual!=null){
            if(virtual.next.val==val){
                virtual.next=virtual.next.next;
            }else{
                virtual=virtual.next;
            }
        }
        return dummyhead.next;//这里注意返回的是虚拟头节点的下一个节点,不是head,因为head可能已经被删除掉了
    }
}

这个点需要注意一下(理解这里的虚拟头节点的作用,dummy和temp操作的还是同一个节点)

这是一个关于对象引用的关键问题。在Java中,当你创建两个引用并将它们指向同一个对象时,修改其中一个引用指向的对象会影响另一个引用,因为它们指向的是同一个对象。但是,当你改变一个引用本身(即让它指向一个新的对象或节点),这不会影响另一个引用。

标签:pre,head,ListNode,val,元素,virtual,next,链表,移除
From: https://www.cnblogs.com/dfj-blog/p/18326006

相关文章

  • 单链表的实现和操作
    目录一.前言二.单链表的定义和结构三.单链表的操作一.前言    线性表的链式表示又称为非顺序映像或链式映像。简而言之,链表可以理解为由指针链连接的n个结点组成的。其中每一个结点包括数据域和指针域。值得注意的是,与顺序表不同,链表中的逻辑次序与物理次序不......
  • 单链表的建立
    一.前言    单链表的建立一共有两种方法,一种是头插法,将元素插入在链表的头部,也叫前插法。另外一种则就是尾插法,将元素插入在链表尾部,也叫后插法。二.头插法    首先从一个空表开始,重复读入数据;接着生成新结点,将读入的数据存放到新结点的数据域当中;最后从......
  • numpy 中用最少内存对上三角元素求和的最快方法
    我需要对对称矩阵进行类型求和i<j这相当于对矩阵的上三角元素求和,不包括对角线。给定A对称NxN数组,最简单的解决方案是np.triu(A,1).sum()但是我想知道是否存在需要更少内存的更快方法。看起来(A.sum()-np.diag(A).sum())/2......
  • 【数据结构】单链表的增删改查
    介绍链表是有序的列表,但是它在内存中是如下存储的:①链表以节点的方式进行存储,是链式存储的②每个节点包含data域、next域:指向下一节点③链表的各个节点不一定是连续存放的④链表分为有头节点的链表和没有头节点的链表 head节点1.不存放具体数据2.作用就是表示......
  • Selenium WebDriverWait 无法检测用于使用 Selenium 提交嵌入式视频答案的表单元素
    我一直在使用Selenium编写一个机器人来自动化学校强迫我做的系列教程。在本教程中,有一个视频在中途提示用户填写表格和一些问题。我一直在尝试使用此代码在视频播放时等待,直到表单可见WebDriverWait(driver,1000).until(EC.presence_of_element_located((B......
  • 关注子集的元素
    对编码相当陌生,我有一个关于列表和子集的问题。假设这是我的列表:list=[[[a,2],[c,3],[e,3]],[[g,4],[i,4][k,3]],[[b,3],[d,2],[f,2]]]我将如何制作一个专注于索引-1(或数字)的新列表来将它们相加,如果总和超过8则不打印到新列表中,如果是少打印。例如:......
  • 为什么 Selenium 找不到我在代码中指定的元素,即使它在 HTML 中?
    我正在学习如何使用ChromeDriver在Python3.9.2上使用Selenium自动浏览网站,但我被困在GitHub的登录页面,这是我正在练习的网站。这是我的代码用于自动登录:fromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsfromselenium.web......
  • 栈,队列,链表
     栈堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈......
  • 496. 下一个更大元素 I
    传送锚点:.-力扣(LeetCode)nums1中数字x的下一个更大元素是指x在nums2中对应位置右侧的第一个比x****大的元素。给你两个没有重复元素的数组nums1和nums2,下标从0开始计数,其中nums1是nums2的子集。对于每个0<=i<nums1.length,找出满足nums1[i]......
  • 存在重复元素 II-哈希表
    题目描述:个人题解:从左到右遍历数组nums,当遍历到下标i时,如果存在下标j<i使得nums[i]=nums[j],则当i−j≤k时即找到了两个符合要求的下标j和i。如果在下标i之前存在多个元素都和nums[i]相等,为了判断是否存在满足nums[i]=nums[j]且i−j≤k的下标j,应该在这......