请稍等 ...
×

采纳答案成功!

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

您好,老师,我是初学C++的一名学员,我在阅读您的源码,关于 自底向上的链表归并,有一段十分的不理解,希望您能帮忙解答一下

tail = p;

while(tail->next) tail = tail->next;

ListNode* ret = dummyHead->next;
delete dummyHead;
return ret;

做 while() 这个循环的意义在哪里?
还有就是已经 delete 了dummyHead了,整个链表已经被释放了,为什么还能返回?

正在回答

1回答

liuyubobobo 2020-02-24 01:54:21

1

这层 while 循环的意义是让 tail 指向链表的末尾。

因为 tail 在这个函数中是引用类型(ListNode* &tail),所以,tail 的值最终会传回调用函数,做后续的逻辑使用。


2

delete dummyHead 不会释放整个链表。因为 dummyHead 是 Node* 类型,delete dummyHead 只会释放 dummyHead 这一个 Node 占据的内存。


ret 事先已经存储了 dummyHead->next,所以,最终返回的是原先 dummyHead->next 的节点,也就是链表的第一个头结点(把虚拟头结点扔掉了)。


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕侠3188403 #1
    老师,那第80行的cur->next = NULL;是否应该去掉,我认为不去掉的话,不能满足第59行while(cur->next)条件,继续向下遍历 分组的啊
    回复 有任何疑惑可以回复我~ 2020-02-24 23:15:01
  • liuyubobobo 回复 提问者 weixin_慕侠3188403 #2
    实际用一个简单的例子测试一下,用单步跟踪的方式实际看一看,程序能不能满足这个条件?是怎么满足的?(答案:在 while(cur->next) 前有 ListNode *pre = dummyHead, *cur = pre; 重置了 cur)
    回复 有任何疑惑可以回复我~ 2020-02-25 03:20:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信