contributed by < YiChainLin
>
Leetcode : 82. Remove Duplicates from Sorted List II,以下是可能的合法 C 程式實作:
linked list
結構為單向連結的方式linked list
head
指向第一個元素,其值為 1 ,與 head->next->val
的值做比較,所以 1 != 2
因此將下一個元素 head->next
進入遞迴head
指向第二個元素,其值為 2 ,與 head->next->val
的值做比較,所以 2 == 2
進入判斷式中head = head->next
, (注意:這裡的 head
是遞迴上一層的 head->next
),然後在進行下兩個元素的判斷, 2 != 4
所以重複元素的判斷已結束head = head->next
走訪至第四個節點後返回此沒有重複的節點head->next = deleteDuplicates(head->next);
返回值為 val = 4
的節點,使一開始的 head
連結到第四個元素,但是重複的元素只是被移除( remove
)並未被刪除( delete
),持續的遞迴的操作將把所有重複的元素移除tmp
的節點,使 tmp->next = head
指向 head
,建立兩個指標分別為 prev
與 cur
作為走訪節點用途while
迴圈中的判斷條件為 cur->next && cur->val == cur->next->val
所以 head != 1
並未有重複點的情況,因此兩個指標個都向前走訪一個節點 prev = prev->next;
cur = cur->next;
cur
指標遇到重複點進入 while
迴圈中持續走訪重複的節點,直到不重複prev->next
指標指向未重複點也就是 cur->next
完成重複點的移除,移除所有的重複點後, return tmp->next
也就是原本的 head
Leetcode : 146. LRU Cache,以下是可能的合法 C 程式實作:
doubly circular-linked list
的結構