| 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)))
 
- } */
 
 
  |