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 partition(head *ListNode, x int) *ListNode { // if head == nil || head.Next == nil { // return head // } // dummy := ListNode{0, head} // fast, slow := &dummy, &dummy // // slow -> body -> fast -> target -> tail // // => slow -> target -> body -> fast -> tail // // => slow -> body -> fast -> tail // // or fast/slow -> tail // for fast != nil { // if fast.Next != nil && fast.Next.Val < x { // if fast == slow { // fast = fast.Next // } else { // tail := fast.Next.Next // fast.Next.Next = slow.Next // slow.Next = fast.Next // fast.Next = tail // } // slow = slow.Next // } else { // fast = fast.Next // } // } // return dummy.Next // } /* func main() { l15 := ListNode{5, nil} l14 := ListNode{0, &l15} l13 := ListNode{6, &l14} l12 := ListNode{3, &l13} l1 := &ListNode{7, &l12} fmt.Println(list2str(partition(l1, 6))) fmt.Println(list2str(partition(nil, 9))) l23 := ListNode{3, nil} l22 := ListNode{2, &l23} l2 := &ListNode{1, &l22} fmt.Println(list2str(partition(l2, 9))) } */