LeetCode(86) 分隔鍊錶

2022-05-07 08:27:10 字數 1234 閱讀 7135

medium!

題目描述:

給定乙個鍊錶和乙個特定值x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

你應當保留兩個分割槽中每個節點的初始相對位置。

示例:

輸入: head = 1->4->3->2->5->2, x = 3

輸出: 1->2->2->4->3->5

解題思路:

這道題要求我們劃分鍊錶,把所有小於給定值的節點都移到前面,大於該值的節點順序不變,相當於乙個區域性排序的問題。那麼可以想到的一種解法是首先找到第乙個大於或等於給定值的節點,用題目中給的例子來說就是先找到4,然後再找小於3的值,每找到乙個就將其取出置於4之前即可

c++解法一:

1

class

solution else19}

20return dummy->next;21}

22 };

這種解法的鍊錶變化順序為:

1 -> 4 -> 3 -> 2 -> 5 -> 2 

1 -> 2 -> 4 -> 3 -> 5 -> 2 

1 -> 2 -> 2 -> 4 -> 3 -> 5

此題還有一種解法,就是將所有小於給定值的節點取出組成乙個新的鍊錶,此時原煉表中剩餘的節點的值都大於或等於給定值,只要將原鍊錶直接接在新鍊錶後即可。

c++解法二:

1

class

solution else18}

19 p->next = dummy->next;

20return newdummy->next;21}

22 };

此種解法鍊錶變化順序為:

original: 1 -> 4 -> 3 -> 2 -> 5 -> 2 

new:

original: 4 -> 3 -> 2 -> 5 -> 2 

new:   1

original: 4 -> 3 -> 5 -> 2 

new:   1 -> 2

original: 4 -> 3 -> 5 

new:   1 -> 2 -> 2

original: 

new:   1 -> 2 -> 2 -> 4 -> 3 -> 5 

Leetcode86 分隔鍊錶

題目描述 給定乙個鍊錶和乙個特定值x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5演算法描述 此題有兩種解法,第一種就是將所有小於給定值的節點取...

leetcode86 分隔鍊錶

給定乙個鍊錶和乙個特定值x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 把所有小於給定值的節點都移到前面,大於該值的節點順序不變。將所有小於給...

leetcode86分隔鍊錶

給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 新建兩個鍊錶,給定的特定值。對鍊錶分隔,將小於特定值的節點放在乙個鍊...