看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《shadown ()》之銘言: :  最近遇到一個面試官,有問到我一個問題,是關於串列 :  方面的。 :  題目是:連續輸入幾個數字,最後輸入零表示程式結束。 :      之後再輸入一個數字,將前面輸入的數字與此 :      數比較,印出比此數大的數字。 :  我的解答,是用while來判斷串列中的data值是否為零, :  是的話表示資料已經到最後一筆,結束比較大小的判斷。 :  面試官的解答,是用while來判斷串列中的next值是否為 : NULL,是的話表資料已經到最後一筆,結束比較大小的判 :  斷。 :  面試官的回答雖然在邏輯上是比較合理,但我覺得我的方 :  法應該也不能算錯,畢竟題目是說用零來當結束。所以想 :  請教一下各位前輩,我這樣算是錯的嗎? 補充一點, 一般的寫法也不是像考官說的那種. 通常是檢查 pointer 本身是不是 null, 而不是 next 是不是 null. (當然, 考官說的要寫也寫得出來) for(node* p = myList; p != NULL; p = p->next) { // do something on p } 如果檢查的是 p->next 是否 null 就比較麻煩了 (一時想不到比較好看的寫法) if (myList != null) { node * p = null; do { p = ((p == NULL)? myList : p->next); // do something with p } while (p->next != null) 超難看 XDD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82
VictorTom:個人覺得拿next判斷也很常見, 不過用next判斷有一個問題 04/27 18:53
VictorTom:是, 要先確定第一個node本身是不是null或保證一定有值:) 04/27 18:54
ledia:換成 while ((p=p->next) != null); 會不會太醜 ? XD 04/27 18:57
adrianshum:嗯, 可是嚴格來說那也是檢查 p 而不是檢查 next呀 04/27 19:00
想了一想, 修改過, 有好看一點了 :P 不過我還是比較喜歡第一種 ※ 編輯: adrianshum 來自: 202.155.236.82 (04/27 19:03)
VictorTom:小弟我記得之前寫list時, always讓list有個dummy的head, 04/27 19:06
VictorTom:之後的判斷就可以直接while或for判斷p->next是否null了. 04/27 19:07
VictorTom:現在想一想, 似乎直接判斷p就好了, 還省1個node的空間XD 04/27 19:08
VictorTom:當時這麼做, 是因為我很懶的判斷現在有沒有第一筆資料, 04/27 19:10
shadown:第一種寫法好棒!原來指標可以用for來判斷,又學了一招。 04/27 19:10
ledia:我也是習慣用個 dummy head .... 04/27 19:10
VictorTom:是不是需要建head node等等; 所以固定開個dummy head:) 04/27 19:11
VictorTom:l大(握)....XD check eax和eax加固定bias不曉得有沒有 04/27 19:13
VictorTom:performance上的差距, 雖然看起來都是一條inst解決@_@" 04/27 19:13
VictorTom:check的地方忘了 [], 果然我和asm不熟....Orz 04/27 19:14
adrianshum:我倒沒有做過 dummy head 耶. 有一個 dummy node 總 04/27 19:15
adrianshum:覺得有點怪怪的 XD 倒是通常外面包一個 struct (C 的 04/27 19:16
adrianshum:年代) 比較多. 04/27 19:16
VictorTom:糟~~小弟我記憶體只有128M跑98的時候就在開dummy了XDDD 04/27 19:32
Yshuan:dummy就跟陣列邊界值多宣1個一樣 省事但是費空間囉~ 04/27 22:07
adrianshum:我學 programming 的年代是 95 + P-133 + 32MB RAM XD 04/28 01:44
VictorTom:再說下去等下就有人拿洞洞卡寫程式了這我哪受得了XD 04/28 01:46
VictorTom:不過, 以前寫程式的時候真的是有一堆亂七八糟亂用的. 04/28 01:47
VictorTom:現在工作是把亂七八糟的程式加/修一些亂七八糟的代碼Orz 04/28 01:48