Leetcode_86_分割連結串列_連結串列

九幽孤翎發表於2021-01-03

1/3

個人認為是一道非常好的題
能很好的熟悉c與java之間指標的操作
思路:先構建一個頭指標,next指向head,
然後找到一個節點的next大於等於x,
也就是說我們要把這個節點後所有小於x的點
依次插入到這個節點前面。
我們用fir和sec兩個指標來實現這個操作。
fir指向的是插入的位置,它始終指向第一個大於等於x的前一位
我們可以通過每次插入後,後移fir這個節點來維護這個位置。
sec是我們目前要處理的節點的前一位,
之所以是前一位是因為我們要刪除一個節點,
必須將它前一位的next變成這一位的next,
所以我們得保留它前一位的指標。
接下來的增加和刪除操作我就不加贅述了。
class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode fir= new ListNode();
        ListNode sec=null;
        fir.next = head;
        head = fir;
        while (fir != null && fir.next != null) {
            if (fir.next.val >= x) {
                sec = fir.next;
                break;
            }
            fir = fir.next;
        }
        while (sec != null && sec.next != null) {
            if (sec.next.val < x) {
                ListNode temp= sec.next;
                sec.next = sec.next.next;
                temp.next = fir.next;
                fir.next = temp;
                fir = fir.next;
                continue;
            }
            sec = sec.next;
        }
        return head.next;
    }
}

相關文章