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) { if(head==null||head.next==null) return head; ListNode little_start=new ListNode(0),little_end=little_start; ListNode big_start=new ListNode(0),big_end=big_start; ListNode pListNode=head; while(pListNode!=null) { if(pListNode.val<x) { little_end.next=pListNode; little_end=pListNode; }else { big_end.next=pListNode; big_end=pListNode; } pListNode=pListNode.next; } little_start=little_start.next; big_start=big_start.next; if(little_start!=null) { big_end.next=null; little_end.next=big_start; return little_start; } else return big_start; }
原文:http://blog.csdn.net/mnmlist/article/details/43535377