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.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值