LeetCode: Partition List 解题报告

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.

LeetCode: Partition List 解题报告

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 }
View Code

CODE:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/list/Partition.java

你可能感兴趣的:(partition)