leetcode---86. 分隔鏈表

給定一個鏈表和一個特定值 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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章