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