程式設計題 分隔鍊錶

2021-08-20 07:14:52 字數 1366 閱讀 2825

題目介紹

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

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

示例

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

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

思路:

將整個鍊錶分為兩個鍊錶,一部分是小於x的,一部分是大於等於x的,最後再拼接到一起

注意:1>不是要求公升序排列,而只是把小於x的點按原來的排序移到前面,

2>不是真的建立了乙個新鍊錶,開闢了新的記憶體,而是用新的頭指標指向原煉表中大於等於x的部分,

並將它們依次串起來,而小於x的部分還在原煉表中,而且是連續的

3>其餘注意點都在**中進行了注釋

**(這不是唯一的方法,但是是在leetcode上通過了所有測試用例的)

/**

* definition for singly-linked list.

* struct listnode ;

*/struct listnode* partition(struct listnode* head, int x)

else

if(cur->val >= x && head1 !=

null)//新鍊錶的頭指標指向原煉表中第乙個大於等於x的結點

else

if(cur->val >= x && head1 ==

null)//新煉表不為空,則往新鍊錶中插入當前大於等於x的結點

if(prev !=

null)

prev->next = cur->next;

cur = cur->next;

}if(prev !=

null)

prev->next = head1;//此時原鍊錶已經全是小於x的結點了,而且prev指向的是原鍊錶的尾部,

//將原煉表和新鍊錶拼接起來

if(cur1 !=

null)

cur1->next =

null; //新鍊錶只能保證head1到cur1的部分是原煉表上拆下來的大於等於x的結點,

//但是cur1後的結點的結點還是原煉表上最後乙個大於等於x的結點之後的結點

//這塊有點繞,需要多體會一下,我在下面畫了張**釋這塊

分隔鍊錶(鍊錶 LeetCode)

題目鏈結 給你乙個鍊錶和乙個特定值 x 請你對鍊錶進行分隔,使得所有小於 x 的節點都出現在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5維護兩個鍊錶,乙個鍊錶儲存比x小的結點,另乙個鍊錶儲...

力扣第86題分隔鍊錶

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

LeetCode 分隔鍊錶

給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 思路分析 本題主要就是一句節點的val的大小進行分類,小於x的放一邊...