題目介紹
給定乙個鍊錶和乙個特定值 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的放一邊...