要根據鍊錶節點的值是否大於等於x將鍊錶劃分為兩段,首先需要鍊錶中大於等於x和小於x的節點的個數,所以無法直接在原煉表上做修改。
既然要分開大於等於x的值和小於x的值,我們可以考慮開兩個鍊錶,這樣按順序掃瞄原鍊錶的時候,小於x的值接到第乙個鍊錶,大於等於x的值接到第二個鍊錶。
然後再把這兩個鍊錶連線起來,就得到了滿足題目條件的鍊錶,且節點之間的相對順序沒變。
由於煉表裡可能乙個大於等於x或者小於x的值都不存在,所以開的兩個鍊錶是有可能為空的,因此我們需要引入虛擬頭節點。
不妨設兩個鍊錶的虛擬頭節點為leftdummy和rightdummy,然後要遍歷原鍊錶,將節點連線到兩個新鍊錶,因此兩個新鍊錶需要尾指標,分別設為lefttail和righttail。
這樣,遍歷一下原鍊錶,如果當前節點的值小於x,則連線到lefttail,然後lefttail向後移動;
如果當前節點的值大於等於x,則連線到righttail,然後righttail也向後移動。
遍歷完原鍊錶之後,兩個新鍊錶就連線起來了小於x和大於等於x的節點了,這時需要連線起來兩個鍊錶。
只需要讓lefttail -> next = rightdummy -> next;也就第乙個鍊錶的尾指標指向第二個鍊錶虛擬頭節點的下乙個節點(即第乙個節點)。
然後還需要righttail -> next = null;鍊錶最後乙個節點的next指標需要指向空。
返回值就是lefttail -> next(虛擬頭節點的下乙個節點)。
class solution else
}lefttail -> next = rightdummy -> next; //連線左右兩個鍊錶
righttail -> next = null; //最後乙個節點的next指標指向空
return leftdummy -> next;}};
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 新建兩個鍊錶,給定的特定值。對鍊錶分隔,將小於特定值的節點放在乙個鍊...