給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。
你應當保留兩個分區中每個節點的初始相對位置。
示例:
輸入: head = 1->4->3->2->5->2, x = 3 輸出: 1->2->2->4->3->5
思路:將鏈表分隔,其實這跟鏈表的特性相關。因爲鏈表是next屬性進行相連接的。我們在調整鏈表的時候其實只需要不斷調整next屬性指向即可。
那麼這個題目我們可以引入兩個頭結點before、after。就是將鏈表中小於給定特定值的都放在before鏈中,大於等於的都放在after的鏈中。after鏈的最後一個是鏈表中的最大值也是調整後鏈表的最後一個結點。所以它的指向爲null.而before鏈與after鏈連接起來。就是整個調整後的鏈表。
public ListNode partition(ListNode head, int x) {
ListNode before = new ListNode(0);
ListNode after = new ListNode(0);
ListNode beforeCur = before;
ListNode afterCur = after;
while(null != head){
if(head.val < x){
beforeCur.next = head;
beforeCur = beforeCur.next;
}
else{
afterCur.next = head;
afterCur = afterCur.next;
}
head = head.next;
}
//將分後的最後一個結點的next置爲空
afterCur.next = null;
//將兩個進行拼接
beforeCur.next = after.next;
return before.next;
}