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: