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.
SOLUTION 1:
注意使用Dummynode来记录各个链条的头节点的前一个节点。这样我们可以轻松找回头节点。
1. Go Through the link, find the nodes which are bigger than N, create a new link.
2. After 1 done, just link the two links.
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public ListNode partition(ListNode head, int x) { 14 if (head == null) { 15 return null; 16 } 17 18 ListNode dummy = new ListNode(0); 19 dummy.next = head; 20 21 ListNode pre = dummy; 22 ListNode cur = head; 23 24 // Record the big list. 25 ListNode bigDummy = new ListNode(0); 26 ListNode bigTail = bigDummy; 27 28 while (cur != null) { 29 if (cur.val >= x) { 30 // Unlink the cur; 31 pre.next = cur.next; 32 33 // Add the cur to the tail of the new link. 34 bigTail.next = cur; 35 cur.next = null; 36 37 // Refresh the bigTail. 38 bigTail = cur; 39 40 // 移除了一个元素的时候,pre不需要修改,因为cur已经移动到下一个位置了。 41 } else { 42 pre = pre.next; 43 } 44 45 cur = pre.next; 46 } 47 48 // Link the Big linklist to the smaller one. 49 pre.next = bigDummy.next; 50 51 return dummy.next; 52 } 53 }
CODE:
https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/list/Partition.java