[問題] 基礎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