讓我們一起啃演算法----刪除排序連結串列中的重複元素

三斤和他的喵發表於2020-05-14

刪除排序連結串列中的重複元素(Remove-Duplicates-From-Sorted-List)

題幹:

給定一個排序連結串列,刪除所有重複的元素,使得每個元素只出現一次。
示例 1:
  輸入: 1->1->2
  輸出: 1->2
示例 2:
  輸入: 1->1->2->3->3
 &nbsp輸出: 1->2->3
來源:力扣

還記得刪除排序陣列的重複項是如何解決的嘛,戳這裡,思路都差不多。

其實力扣有很多相似的題目,只不過承載形式不一樣而已。比如上面的刪除重複項,先前是承載在陣列上,這題則承載在連結串列上。

解題思路

初始化指標 current,使其指向連結串列頭。

比較 current 的 val 值 與 current.next 的 val 值。如果 current.val 與 current.next.val 相等,則將 current.next 指向 current.next.next,相當於將原本 current.next 拋棄。如果不想等,則 current 指向 current.next。重複上面的操作。

流程圖如下:

程式碼實現

GO語言實現

func deleteDuplicates(head *ListNode) *ListNode {
    current := head
    // 當前節點為空 或者 當前節點的下一個節點為空 則認為迴圈結束
    for current != nil && current.Next != nil {
        // 相等,則跳過下一個節點
        if current.Val == current.Next.Val {
            current.Next = current.Next.Next
        } else {
            // 不想等,則移動到下一個節點
            current = current.Next
        }
    }
    // 返回
    return head
}

總結

每天進步一點點,加油!
演算法教程專案,每天更新一題,點個 star 支援一下呀
github.com/wx-satellite/learning-a...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

三斤

相關文章