leetcode-82:刪除排序連結串列中重複的元素-ii

不蛋定發表於2020-12-21

題目描述

給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。

示例 1:

輸入: 1->2->3->3->4->4->5
輸出: 1->2->5
示例 2:

輸入: 1->1->1->2->3
輸出: 2->3

解題思路

  • 建立一個空節點當頭節點
  • 每次判斷頭節點的下一個和下下一個
  • 需要儲存被刪掉的值以迴圈判斷,直到下一個不是此值
  • 每次對比的是下一個和下下一個。因此刪除完不需要將當前指標移到下一個節點

程式碼實現

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteDuplicates(head *ListNode) *ListNode {
	if head == nil {
		return head
	}

	headNode := &ListNode{Val: 0}
	headNode.Next = head
	head = headNode

	rmVal := 0
	for head.Next != nil && head.Next.Next != nil {
		if head.Next.Val == head.Next.Next.Val {
			rmVal = head.Next.Val
			for head.Next != nil && head.Next.Val == rmVal {
				head.Next = head.Next.Next
			}
		} else {
			head = head.Next
		}
	}
	return headNode.Next
}

相關文章