contributed by < nckusaniel >
針對 LeetCode 82. Remove Duplicates from Sorted List II,以下是可能的合法 C 程式實作:
把程式碼拆解並討論。
代表head為NULL,並return NULL,
是遞迴呼叫的中止條件,可能情況如下
代表第一個if不成立,即 1.串列非空 2.還沒到尾巴
if成立 -> while成立-> head指到下一點 ->直到while不成立-> 遞迴呼叫head->next
探討:
if成立–-發現重複的節點(不知道有幾個重複節點所以用while
while成立– 跳過這些重複節點
while不成立– head!=head->next,head停在重複節點中的最後一點
我們不要這些重複節點,因此遞迴呼叫head->next來判斷下一點之情形
會執行上述程式碼,代表輸入的參數head,不符合前兩個if,即head符合以下條件
判斷是否與下一點相同
head->val ==head->next->val
COD1= head->next && head->val ==head->next->val
跳過重複節點
COD2=head->next && head->val ==head->next->val
延伸問題:
1.嘗試避免遞迴,寫出同樣作用的程式碼
2.以類似 Linux 核心的 circular doubly-linked list 改寫,撰寫遞迴和迭代 (iterative) 的程式