[问题] 基础Pointer问题 LC2807

楼主: CppGod (CPP IS GOD)   2024-06-07 16:59:21
开发平台(Platform): (Ex: Win10, Linux, ...)
Windows
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VS
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
程式码中的(1)是正确的写法,但不了解为什么(2)的写法不行
想法是ListNode n()完后,让ptr=&n,但结果是错的
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
https://ideone.com/Gb60BJ
程式码(Code):
https://ideone.com/i5eC0B
补充说明(Supplement):
先谢谢各位前辈了!
作者: Richun (解放左手的OO之力)   2024-06-07 17:33:00
写法1的东西放在heap,写法2的会放在stack
作者: jack7775kimo (阿庞)   2024-06-07 17:49:00
想想n什么时候会解构,进而造成一些麻烦
作者: idiont (supertroller)   2024-06-07 17:51:00
写法2 n的lifetime只到该次循环结束
作者: cuteSquirrel (松鼠)   2024-06-07 19:15:00
物件的生命周期不同
作者: peter98 (新兵)   2024-06-07 22:16:00
看了一下,好奇为什么这题是medimum 0.0是因为对外国人来说算GCD比较困难?
作者: LPH66 (-6.2598534e+18f)   2024-06-08 07:28:00
我猜应该是把两件事 (GCD 跟链结串行插入) 合起来的关系?
作者: wulouise (在线上!=在电脑前)   2024-06-08 11:58:00
要找本基础书看,建议https://stackoverflow.com/a/388282/4123703
作者: peter98 (新兵)   2024-06-08 20:38:00
我还是觉得这题应该是easy~ 虽然没写过但10分内可以秒掉另外给个刷题的建议(这个建议无关程式正确与否,只是关乎到面试20分钟内要写完一个不易出错的程式),尽量不要用while(ptr->next != NULL)这种判断,容易错,最好是让ptr一开始就先往前跳一个node,while只判断ptr != NULL,另外也尽量不要用ptr->next->next这种一个next再一个next的写法,哪天你不小心while只判断ptr!=null时,那个ptr->next->next就GG惹,重申一次,我给的这个建议只跟面试刷题有关,能确保一开始就写出不容易错的code,不用debug这题就先判断head是不是null,事就直接return,接下来ListNode *prev = head; ListNode *cur= head->next用while(cur) {......; cur = cur->next}去玩就好保持这种写法,将来遇到复杂的LinkedList操作就不易出错while里面当然也要继续maintain prev
楼主: CppGod (CPP IS GOD)   2024-06-14 00:51:00
感谢wu大分享书单 & 感谢peter大教学

Links booklink

Contact Us: admin [ a t ] ucptt.com