这里注意我们操作链表的时候都要使用临时指针来进行遍历链表的操作,不然会改变链表的原始数据,这里我使用两种方式来进行删除的操作
原链表删除元素
class Solution {
public ListNode removeElements(ListNode head, int val) {
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;
while(virtual.next!=null &&virtual!=null){
if(virtual.next.val==val){
virtual.next=virtual.next.next;
}else{
virtual=virtual.next;
}
}
return dummyhead.next;
}
}
这个点需要注意一下(理解这里的虚拟头节点的作用,dummy和temp操作的还是同一个节点)

这是一个关于对象引用的关键问题。在Java中,当你创建两个引用并将它们指向同一个对象时,修改其中一个引用指向的对象会影响另一个引用,因为它们指向的是同一个对象。但是,当你改变一个引用本身(即让它指向一个新的对象或节点),这不会影响另一个引用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)