/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func partition(head *ListNode, x int) *ListNode {
// 遍历链表将所有小于x的节点摘下, 连接成为一个新的链表
// 再将两个链表连接起来
var preHead = new(ListNode)
preHead.Next = head
var List = new(ListNode)
pre := preHead
p := preHead.Next
cur := List
for p != nil {
if p.Val < x {
node := p
p = p.Next
pre.Next = p
node.Next = cur.Next
cur.Next = node
cur = cur.Next
} else {
pre = pre.Next
p = p.Next
}
}
cur.Next = preHead.Next
return List.Next
}