作者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/m.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