給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。
你應當保留兩個分割槽中每個節點的初始相對位置。
示例:
輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5
思路分析:本題主要就是一句節點的val的大小進行分類,小於x的放一邊,大於、等於的放一邊,最後將兩個合起來就行。其實還是比較好解決的。
方法一:可能有些道友認為節點的移動涉及到比較「高深」的指標問題,這裡首先介紹一種利用佇列輔助的演算法。
就是用兩個佇列,分別儲存兩種分類,最後重寫鍊錶即可。(這種演算法不涉及到節點的移動)(時間複雜度o(n),額外空間複雜度o(n))
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
else
p = p-
>next;
} p = head;
//重寫鍊錶
//首先寫beforequeue
while
(!beforequeue.
empty()
)//再寫afterqueue
方法二:根據val的大小直接將節點進行分成兩類,最後將兩段鍊錶拼接在一起。(時間複雜度o(n),額外空間複雜度o(1))
分隔鍊錶(鍊錶 LeetCode)
題目鏈結 給你乙個鍊錶和乙個特定值 x 請你對鍊錶進行分隔,使得所有小於 x 的節點都出現在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5維護兩個鍊錶,乙個鍊錶儲存比x小的結點,另乙個鍊錶儲...
LeetCode 分隔鍊錶
給定乙個鍊錶和乙個特定值x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5借助兩個輔助鍊錶實現即可,然後合併兩個鍊錶。如下 definition ...
Leetcode 分隔鍊錶
給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 使用兩個偽頭部來記錄小於x的鍊錶和大於等於x的鍊錶 最後再將兩個鍊錶...