0082.删除排序链表中的重复元素 II

方法一:一次遍历

时间复杂度 $O(n)$,空间复杂度 $O(1)$。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteDuplicates(head *ListNode) *ListNode {
	dummy := &ListNode{}
	p := dummy
	for head != nil {
		p1, p2 := head, head
		for p2 != nil && p1.Val == p2.Val {
			p2 = p2.Next
		}
		if p1.Next == p2 {
			p.Next, p = p1, p1
		}
		head = p2
	}
	p.Next = nil
	return dummy.Next
}