Description
Given a sorted linked list, delete all duplicates such that each element appear only once.
1 2
| Input: 1->1->2 Output: 1->2
|
1 2
| Input: 1->1->2->3->3 Output: 1->2->3
|
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| type ListNode struct { Val int Next *ListNode }
func deleteDuplicates(head *ListNode) *ListNode { cursor := head
for cursor != nil { if cursor.Next != nil && cursor.Val == cursor.Next.Val { cursor.Next = cursor.Next.Next
continue }
cursor = cursor.Next }
return head }
|
Note
假設有以下參數:
說明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| cursor 的 Next 指向 1 的記憶體位置,假設為 a。
-------------------------------------------------- c head -> 1 (a) -> 1 (b) -> 2 (c) -> 3 (d) -> nil --------------------------------------------------
第 1 次迴圈:
cursor 的值 1 等於下一個節點的值 1,因此將 cursor 的 Next 指向 c。
-------------------------------------------------- c head -> 1 (a) -> 2 (c) -> 3 (d) -> nil --------------------------------------------------
第 2 次迴圈:
cursor 的值 1 不等於下一個節點的值 2,因此將 cursor 指向 c。
-------------------------------------------------- c head -> 1 (a) -> 2 (c) -> 3 (d) -> nil --------------------------------------------------
第 3 次迴圈:
cursor 的值 2 不等於下一個節點的值 3,因此將 cursor 指向 d。
-------------------------------------------------- c head -> 1 (a) -> 2 (c) -> 3 (d) -> nil --------------------------------------------------
第 4 次迴圈:
cursor 的值 nil 等於 nil,因此將 cursor 指向 nil。
-------------------------------------------------- c head -> 1 (a) -> 2 (c) -> 3 (d) -> nil --------------------------------------------------
結束迴圈。
最後返回:1->2->3
|
Code