作者CppGod (CPP IS GOD)
看板C_and_CPP
标题[问题] 基础Pointer问题 LC2807
时间Fri Jun 7 16:59:21 2024
开发平台(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):
先谢谢各位前辈了!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.194.180.216 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1717750767.A.09F.html
1F:推 Richun: 写法1的东西放在heap,写法2的会放在stack 06/07 17:33
2F:→ jack7775kimo: 想想n什麽时候会解构,进而造成一些麻烦 06/07 17:49
3F:推 idiont: 写法2 n的lifetime只到该次回圈结束 06/07 17:51
4F:推 cuteSquirrel: 物件的生命周期不同 06/07 19:15
哇 一语惊醒梦中人! 感谢楼上前辈们的指点!!
※ 编辑: CppGod (123.194.180.216 台湾), 06/07/2024 22:03:26
5F:→ peter98: 看了一下,好奇为什麽这题是medimum 0.0 06/07 22:16
6F:→ peter98: 是因为对外国人来说算GCD比较困难? 06/07 22:16
7F:推 LPH66: 我猜应该是把两件事 (GCD 跟链结串列插入) 合起来的关系? 06/08 07:28
8F:→ wulouise: 要找本基础书看,建议 06/08 11:58
10F:→ peter98: 我还是觉得这题应该是easy~ 虽然没写过但10分内可以秒掉 06/08 20:38
11F:→ peter98: 另外给个刷题的建议(这个建议无关程式正确与否,只是关乎 06/08 20:39
12F:→ peter98: 到面试20分钟内要写完一个不易出错的程式),尽量不要用 06/08 20:39
13F:→ peter98: while(ptr->next != NULL)这种判断,容易错,最好是让ptr 06/08 20:40
14F:→ peter98: 一开始就先往前跳一个node,while只判断ptr != NULL,另 06/08 20:40
15F:→ peter98: 外也尽量不要用ptr->next->next这种一个next再一个next的 06/08 20:40
16F:→ peter98: 写法,哪天你不小心while只判断ptr!=null时,那个ptr-> 06/08 20:41
17F:→ peter98: next->next就GG惹,重申一次,我给的这个建议只跟面试刷 06/08 20:41
18F:→ peter98: 题有关,能确保一开始就写出不容易错的code,不用debug 06/08 20:41
19F:→ peter98: 这题就先判断head是不是null,事就直接return,接下来 06/08 20:46
20F:→ peter98: ListNode *prev = head; ListNode *cur= head->next 06/08 20:46
21F:→ peter98: 用while(cur) {......; cur = cur->next}去玩就好 06/08 20:46
22F:→ peter98: 保持这种写法,将来遇到复杂的LinkedList操作就不易出错 06/08 20:47
23F:→ peter98: while里面当然也要继续maintain prev 06/08 20:48
24F:→ CppGod: 感谢wu大分享书单 & 感谢peter大教学 06/14 00:51