首页 > 代码库 > 86. Partition List

86. 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.

思路:把list分成两份,一份是比pivot小,一份是比pivot大,然后连接起来。用dummy node来partition list,因为head大小无法判断。注意最后要把快的list尾巴断开,用null来断,不然可能还连接着其他node。

/** * 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||head.next==null)return head;    ListNode dummy1=new ListNode(-1);    ListNode dummy2=new ListNode(-1);    ListNode copydummy1=dummy1;    ListNode copydummy2=dummy2;    while(head!=null){        if(head.val<x){            copydummy1.next=head;            copydummy1=copydummy1.next;        }else{            copydummy2.next=head;            copydummy2=copydummy2.next;        }        head=head.next;    }    copydummy2.next=null;    copydummy1.next=dummy2.next;    return dummy1.next;    }}

 

86. Partition List