86. 分隔链表 中等
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
示例 2:
输入:head = [2,1], x = 2
输出:[1,2]
提示:
- 链表中节点的数目在范围 [0, 200] 内
- -100 <= Node.val <= 100
- -200 <= x <= 200
代码参考:
package main
import "fmt"
func main() {
fmt.Println(partition(newList([]int{1, 4, 3, 2, 5, 2}), 3))
}
// 哑节点是利器啊
func partition(head *ListNode, x int) *ListNode {
if head == nil || head.Next == nil {
return head
}
dummy1, dummy2 := new(ListNode), new(ListNode)
cur1, cur2 := dummy1, dummy2
cur := head
for cur != nil { // 遍历构建
if cur.Val < x {
cur1.Next = cur
cur1 = cur
} else {
cur2.Next = cur
cur2 = cur
}
cur = cur.Next
}
cur1.Next = nil // 截断
cur2.Next = nil
cur1.Next = dummy2.Next // 连接
return dummy1.Next
}
最后编辑: kuteng 文档更新时间: 2021-06-05 10:16 作者:kuteng