移除链表元素

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

原链表删除元素

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中,当你创建两个引用并将它们指向同一个对象时,修改其中一个引用指向的对象会影响另一个引用,因为它们指向的是同一个对象。但是,当你改变一个引用本身(即让它指向一个新的对象或节点),这不会影响另一个引用。

posted @   旭熙  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示