package q86 type ListNode struct { Val int Next *ListNode } func partition(head *ListNode, x int) *ListNode { stub := &ListNode{Next: head} before := stub for before.Next != nil && before.Next.Val < x { before = before.Next } for p := before.Next; p != nil && p.Next != nil; { if p.Next.Val < x { move := p.Next p.Next = move.Next move.Next = before.Next before.Next = move before = move } else { p = p.Next } } return stub.Next } var _ = partition