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