请稍等 ...
×

采纳答案成功!

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

波波老師,请教leetcode 203. 移除链表元素

C# 代码实现,为什么返回的时候必须是dummyHead.next;
返回head不行???
dummyHead.next指向的不也是head吗?所以删除节点后,应该返回head也可以啊?

  public ListNode RemoveElements(ListNode head, int val)
        {
            if (head == null)
                return null;
            ListNode dummyHead = new ListNode(-1);
            dummyHead.next = head;
            ListNode cur = dummyHead;
            while (cur.next != null)
            {
                if (cur.next.val == val)
                    cur.next = cur.next.next;
                else
                    cur = cur.next;
            }
            return dummyHead.next;
        }

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-05-09 17:46:02

删除过程,你有可能删除的就是head所指的节点。如果你删除的就是head所指的节点,dummyHead.next和head不一样。此时,dummyHead.next连接的是原来head的next:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_山上山_0 #1
    还是,不是很懂;dummyHead为什么连接的是原来head的next?
    回复 有任何疑惑可以回复我~ 2019-05-10 08:50:40
  • liuyubobobo 回复 提问者 qq_山上山_0 #2
    比如1->2->3,head是1。加上虚拟头结点,是dummy->1->2->3。删除1,变成dummy->2->3。此时head还是1,因为被你的逻辑删掉了。但是dummy->next是2,返回2是正确的。如果还不理解,用这个测试用例,实际对你的代码,单步跟踪调试看一看?看看每一步每个变量都在怎么变化?这是学习算法的重要方法哦。进步就发生在这个过程中:)
    回复 有任何疑惑可以回复我~ 2019-05-10 08:57:03
  • 提问者 qq_山上山_0 回复 liuyubobobo #3
    大概有点明白了;那这个时候我用head=null回收应该可以;因为head一直是在那里的,他的next没有变;
    回复 有任何疑惑可以回复我~ 2019-05-10 09:02:09
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信