30 lines
490 B
Go
30 lines
490 B
Go
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
|