题目描述
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
解题思路
- 对于头节点不确定的,用哑巴节点
- 把大于x的存到另一个链表,然后将其接到原链表之后
代码实现
func partition(head *ListNode, x int) *ListNode {
headNode := &ListNode{Val: 0}
tailNode := &ListNode{Val: 0}
headNode.Next = head
head = headNode
tail := tailNode
for head.Next != nil {
if head.Next.Val >= x {
tail.Next = head.Next
tail = tail.Next
head.Next = head.Next.Next
} else {
head = head.Next
}
}
head.Next = tailNode.Next
tail.Next = nil
return headNode.Next
}