Skip to content

Commit 1ed848f

Browse files
committed
0086. Partition List
1 parent b917e34 commit 1ed848f

File tree

4 files changed

+190
-0
lines changed

4 files changed

+190
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
### [86\. Partition List](https://leetcode.com/problems/partition-list/)
2+
3+
Difficulty: **Medium**
4+
5+
6+
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_.
7+
8+
You should preserve the original relative order of the nodes in each of the two partitions.
9+
10+
**Example:**
11+
12+
```
13+
Input: head = 1->4->3->2->5->2, x = 3
14+
Output: 1->2->2->4->3->5
15+
```
16+
17+
18+
#### Solution
19+
20+
Language: **Java**
21+
22+
```java
23+
/**
24+
* Definition for singly-linked list.
25+
* public class ListNode {
26+
* int val;
27+
* ListNode next;
28+
* ListNode(int x) { val = x; }
29+
* }
30+
*/
31+
class Solution {
32+
   public ListNode partition(ListNode head, int x) {
33+
       if (head == null || head.next == null) {
34+
           return head;
35+
      }
36+
       ListNode fakeHeader = new ListNode(0);
37+
       fakeHeader.next = head;
38+
       ListNode curr = fakeHeader;
39+
       ListNode cutPoint = null;
40+
       while (curr.next != null) {
41+
           if (curr.next.val >= x) {
42+
               if (cutPoint == null) {
43+
                   cutPoint = curr;
44+
              }
45+
               curr = curr.next;
46+
          } else if (cutPoint != null) {
47+
               ListNode node = curr.next;
48+
               curr.next = node.next;
49+
               node.next = cutPoint.next;
50+
               cutPoint.next = node;
51+
               cutPoint = node;
52+
          } else {
53+
               curr = curr.next;
54+
          }
55+
      }
56+
       return fakeHeader.next;
57+
  }
58+
}
59+
```
60+
![pic](https://raw.githubusercontent.com/PicGoBed/PicBed/master/2019-08-01-ACf21S.jpg)

src/main/java/leetcode/_86_/Main.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package leetcode._86_;
2+
3+
import leetcode.common.ListNode;
4+
5+
/**
6+
* Created by zhangbo54 on 2019-03-04.
7+
*/
8+
public class Main {
9+
public static void main(String[] args) {
10+
Solution solution = new Solution();
11+
12+
ListNode node1 = new ListNode(1);
13+
ListNode node2 = new ListNode(4);
14+
ListNode node31 = new ListNode(3);
15+
ListNode node32 = new ListNode(2);
16+
ListNode node41 = new ListNode(5);
17+
ListNode node42 = new ListNode(2);
18+
ListNode node5 = new ListNode(2);
19+
node1.next = node2;
20+
node2.next = node31;
21+
node31.next = node32;
22+
node32.next = node41;
23+
node41.next = node42;
24+
node42.next = node5;
25+
26+
27+
System.out.println(solution.partition(node1, 3));
28+
}
29+
}
30+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package leetcode._86_;
2+
3+
import leetcode.common.ListNode;
4+
5+
/**
6+
* Definition for singly-linked list.
7+
* public class ListNode {
8+
* int val;
9+
* ListNode next;
10+
* ListNode(int x) { val = x; }
11+
* }
12+
*/
13+
class Solution {
14+
public ListNode partition(ListNode head, int x) {
15+
if (head == null || head.next == null) {
16+
return head;
17+
}
18+
ListNode fakeHeader = new ListNode(0);
19+
fakeHeader.next = head;
20+
ListNode curr = fakeHeader;
21+
ListNode cutPoint = null;
22+
while (curr.next != null) {
23+
if (curr.next.val >= x) {
24+
if (cutPoint == null) {
25+
cutPoint = curr;
26+
}
27+
curr = curr.next;
28+
} else if (cutPoint != null) {
29+
ListNode node = curr.next;
30+
curr.next = node.next;
31+
node.next = cutPoint.next;
32+
cutPoint.next = node;
33+
cutPoint = node;
34+
} else {
35+
curr = curr.next;
36+
}
37+
}
38+
return fakeHeader.next;
39+
}
40+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
### [86\. Partition List](https://leetcode.com/problems/partition-list/)
2+
3+
Difficulty: **Medium**
4+
5+
6+
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_.
7+
8+
You should preserve the original relative order of the nodes in each of the two partitions.
9+
10+
**Example:**
11+
12+
```
13+
Input: head = 1->4->3->2->5->2, x = 3
14+
Output: 1->2->2->4->3->5
15+
```
16+
17+
18+
#### Solution
19+
20+
Language: **Java**
21+
22+
```java
23+
/**
24+
* Definition for singly-linked list.
25+
* public class ListNode {
26+
* int val;
27+
* ListNode next;
28+
* ListNode(int x) { val = x; }
29+
* }
30+
*/
31+
class Solution {
32+
   public ListNode partition(ListNode head, int x) {
33+
       if (head == null || head.next == null) {
34+
           return head;
35+
      }
36+
       ListNode fakeHeader = new ListNode(0);
37+
       fakeHeader.next = head;
38+
       ListNode curr = fakeHeader;
39+
       ListNode cutPoint = null;
40+
       while (curr.next != null) {
41+
           if (curr.next.val >= x) {
42+
               if (cutPoint == null) {
43+
                   cutPoint = curr;
44+
              }
45+
               curr = curr.next;
46+
          } else if (cutPoint != null) {
47+
               ListNode node = curr.next;
48+
               curr.next = node.next;
49+
               node.next = cutPoint.next;
50+
               cutPoint.next = node;
51+
               cutPoint = node;
52+
          } else {
53+
               curr = curr.next;
54+
          }
55+
      }
56+
       return fakeHeader.next;
57+
  }
58+
}
59+
```
60+
![pic](https://raw.githubusercontent.com/PicGoBed/PicBed/master/2019-08-01-ACf21S.jpg)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy