086J. 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.

Example:

Input: head = 1->4->3->2->5->2, x = 3 Output: 1->2->2->4->3->5

Method1

分析: 直接新建两个列表拼起来是最简单的。 之前试图在原数组上织布,细节处理失败了。 补充:第二次想织布,又处理细节失败了...

class Solution {
    public ListNode partition(ListNode head, int x) {
        if(head == null){
            return head;
        }
        ListNode preHead = new ListNode(0);
        ListNode pre = preHead;
        ListNode curHead = new ListNode(0);
        ListNode cur = curHead;

        while(head!=null){
            if(head.val < x){
                pre.next = head;
                pre = pre.next;
            }else{
                cur.next = head;
                cur = cur.next;
            }
            head = head.next;
        }
        cur.next = null; // 这一步是必不可少的,防止末尾形成loop。
        pre.next = curHead.next;
        return preHead.next;
    }
}

Last updated

Was this helpful?