请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

将循环语句改为for时有问题

老师,请问能将虚拟头结点的循环语句改为for循环吗?
for(ListNode prev = dummyHead; prev.next != null ; prev = prev.next){
if(prev.next.val == val){
ListNode delNode = prev.next;
prev.next = delNode.next;
delNode.next = null;
}
}
提交到Leetcode上会报错,我自己用IDEA测试了,当链表结尾为6的时候[1,2,3,6,5,6],会报错。其他结尾时就不会。
图片描述

正在回答

1回答

你的这个 for 循环的逻辑和我课程中的 while 循环逻辑不等价。


课程中的这个 while 循环:

while(prev.next != null){
    if(prev.next.val == val)
        prev.next = prev.next.next;
    else
        prev = prev.next;
}


在 prev.next.val == val 的时候,做了删除操作,但是 prev 没有往后移;

只有在 prev.next.val != val 的时候,prev 才后移(执行 prev = prev.next)

但是你的 for 循环,无论什么情况,prev 都后移。所以是错误的。想想为什么?


改成这样即可:

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        
        for(ListNode prev = dummyHead; prev.next != null ; ){
            if(prev.next.val == val){
                ListNode delNode = prev.next;
                prev.next = delNode.next;
                delNode.next = null;
            }
            else
                prev = prev.next;
        }
        
        return dummyHead.next;
    }
}


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 XLL_XOI #1
    谢谢老师
    回复 有任何疑惑可以回复我~ 2022-08-29 00:19:09
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信