86 分割链表-中等

题目:

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

分析:

两个哑结点分别保存两个分区的数据。

// date 2023/10/17
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func partition(head *ListNode, x int) *ListNode {
    dumy1 := &ListNode{}
    dumy2 := &ListNode{}
    d1, d2 := dumy1, dumy2
    pre := head
    for pre != nil {
        if pre.Val < x {
            d1.Next = pre
            d1 = d1.Next
        } else {
            d2.Next = pre
            d2 = d2.Next
        }
        pre = pre.Next
    }
    d2.Next = nil
    d1.Next = dumy2.Next

    return dumy1.Next
}

最后更新于