12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package main
- import (
- "fmt"
- )
- // 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)))
- }
|