剛才看了《The Guerrilla Guide to Interviewing (version 3.0)》,立即想重寫 Joel 提到的兩題面試關鍵題:“reversing a linked list” 和 “detect loops in a tree structure.”。後者很簡單,前者要更動指標內容,記得初學 C 時讓我奮鬥了很久,想來看看自己現況如何。
完成的程式如下(全文見這裡,記得用 gcc -std=c99 編譯):
Node* reverse(Node *node) { if (!node || !node->next) return node; Node* head = reverse(node->next); node->next->next = node; node->next = 0; return head; }
若是以前的話,大概不能這麼自然地寫出簡潔的 code,看來學過 scheme 果然有差,變得較能從高階觀點堆砌程式,也就是將 function 看成基本單位,如此一來,遞迴是自然而然的事。得找個時間練練 functional language,這計畫不能放棄。