Given a linked list and a value x, partition it such that all nodes less than x come before nodes greate R than or equal to x.
You should preserve the original relative order of the nodes in each of the.
For example,
Given 1->4->3->2->5->2
and x = 3,
Return 1->2->2->4->3->5
.
Analysis:
1. Build both empty lists
2. val < x add it to the tail of first list
Val >= x add it to the tail of second list
3. Concatenate the tail of List1 to the head of List2
4. The tail of list2 List.next = null
Java Code:
20160601
/*** Definition for singly-linked list. * public class ListNode {* int val; * ListNode Next; * ListNode (int X) {val = x;}}*/ Public classSolution { PublicListNode partition (ListNode head,intx) {//1. Build both empty lists//2. val < x add it to the tail of first list//Val >= x add it to the tail of second list//3. Concatenate the tail of List1 to the head of List2//4. The tail of list2 List.next = null//Base Case if(Head = =NULL|| Head.next = =NULL) { returnHead; } ListNode cur=Head; ListNode dummy1=NewListNode (0); ListNode Head1=dummy1; ListNode Dummy2=NewListNode (0); ListNode head2=Dummy2; while(cur! =NULL) { if(Cur.val <x) {Dummy1.next=cur; Dummy1=Dummy1.next; } Else{Dummy2.next=cur; Dummy2=Dummy2.next; } cur=Cur.next; } Dummy2.next=NULL; Dummy1.next=Head2.next; returnHead1.next; }}
Leetcode 86. Partition List