| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | package main// ListNode .../* type ListNode struct {	Val  int	Next *ListNode} *//* func list2str(head *ListNode) string {	curr := head	str := make([]rune, 0)	for curr != nil {		str = append(str, rune(curr.Val+'0'))		curr = curr.Next	}	return string(str)} *//** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func deleteDuplicates(head *ListNode) *ListNode {	if head == nil || head.Next == nil {		return head	}	dummy := ListNode{0, head}	slow := &dummy	fast := slow.Next	for fast != nil {		if fast.Next == nil || fast.Next.Val != slow.Next.Val {			// duplicates end			if slow.Next != fast {				// cut dup				slow.Next = fast.Next				fast = fast.Next				// do not move ptr in case of fast maybe nil				continue			}			// no duplicates, move both slow & fasr			slow = slow.Next		}		// if has dup, move fast only		fast = fast.Next	}	return dummy.Next}/* func main() {	l15 := ListNode{5, nil}	l14 := ListNode{5, &l15}	l13 := ListNode{4, &l14}	l12 := ListNode{3, &l13}	l1 := &ListNode{1, &l12}	fmt.Println(list2str(deleteDuplicates(l1)))	fmt.Println(list2str(deleteDuplicates(nil)))} */
 |