Partition List

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode partition(ListNode head, int x) {
        if (head == null) {
            return null;
        }
        ListNode dummy1 = new ListNode(0);
        dummy1.next = head;
        ListNode curt1 = dummy1;
        
        ListNode dummy2 = new ListNode(0);
        ListNode curt2 = dummy2;
        
        while (curt1.next != null) {
            if (curt1.next.val >= x) {
                //update curt1
                ListNode removedNode = curt1.next;
                curt1.next = curt1.next.next;
                
                //update curt2
                curt2.next = removedNode;
                curt2 = curt2.next;
                // make it detached from original list
                curt2.next = null;  
            } else {
                curt1 = curt1.next;
            }
        }
        curt1.next = dummy2.next;
        
        return dummy1.next;
    }
}

你可能感兴趣的:(Partition List)