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.
解法一
用两个指针保存大数列的头和小数列的头,再用两个指针遍历调整,最后将两个和在一起。
public ListNode partition(ListNode head, int x) {
ListNode small=new ListNode(-1);
ListNode big=new ListNode(-1);
small.next=head;
big.next=head;
ListNode curbig=big;
ListNode cursmall=small;
while(head!=null){
if(head.val>=x)
{
cursmall.next=head.next;
curbig=curbig.next;
}
else
{
curbig.next=head.next;
cursmall=cursmall.next;
}
head=head.next;
}
cursmall.next=big.next;
return small.next;
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Partition List.
Memory Usage: 36.9 MB, less than 26.25% of Java online submissions for Partition List.
解法二
用两个指针,先用pre找到大于等于x的,再用cur找到小于x的,将cur找的的点放到pre找的的点的前面
public ListNode partition(ListNode head, int x) {
ListNode res=new ListNode(-1);
res.next=head;
ListNode pre=res;
ListNode cur=res;
while(pre.next!=null&&pre.next.val<x)
pre=pre.next;
cur=pre;
while(cur.next!=null)
{
if(cur.next.val<x){
ListNode tmp=cur.next;
cur.next=tmp.next;
tmp.next=pre.next;
pre.next=tmp;
pre=pre.next;
}
else
cur=cur.next;
}
return res.next;
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Partition List.
Memory Usage: 36.9 MB, less than 35.55% of Java online submissions for Partition List.