Skip to content

Commit 5c47593

Browse files
solves reorder list in java
1 parent 0def0e3 commit 5c47593

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
| 139 | [Word Break](https://leetcode.com/problems/word-break) | [![Java](assets/java.png)](src/WordBreak.java) | |
128128
| 141 | [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle) | [![Java](assets/java.png)](src/LinkedListCycle.java) [![Python](assets/python.png)](python/linked_list_cycle.py) | |
129129
| 142 | [Linked List Cycle II](https://leetcode.com/problems/linked-list-cycle-ii) | [![Java](assets/java.png)](src/LinkedListCycleII.java) | |
130-
| 143 | [Reorder List](https://leetcode.com/problems/reorder-list) | | |
130+
| 143 | [Reorder List](https://leetcode.com/problems/reorder-list) | [![Java](assets/java.png)](src/ReorderList.java) | |
131131
| 144 | [Binary Tree Preorder Traversal](https://leetcode.com/problems/binary-tree-preorder-traversal) | [![Java](assets/java.png)](src/BinaryTreePreOrderTraversal.java) [![Python](assets/python.png)](python/binary_tree_preorder_traversal.py) | |
132132
| 145 | [Binary Tree Postorder Traversal](https://leetcode.com/problems/binary-tree-postorder-traversal) | [![Java](assets/java.png)](src/BinaryTreePostorderTraversal.java) [![Python](assets/python.png)](python/binary_tree_postorder_traversal.py) | |
133133
| 146 | [LRU Cache](https://leetcode.com/problems/lru-cache) | [![Java](assets/java.png)](src/LRUCache.java) | |

Diff for: src/ReorderList.java

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// https://leetcode.com/problems/reorder-list
2+
// T: O(N)
3+
// S: O(1)
4+
5+
public class ReorderList {
6+
public void reorderList(ListNode head) {
7+
if (head == null || head.next == null) return;
8+
9+
ListNode middle = getMiddleOfLinkedList(head);
10+
ListNode preMiddle = reverseLinkedList(middle);
11+
interleaveNodes(head, preMiddle);
12+
}
13+
14+
private ListNode getMiddleOfLinkedList(ListNode head) {
15+
ListNode p1 = head;
16+
ListNode p2 = head;
17+
while(p2.next!=null&&p2.next.next!=null){
18+
p1 = p1.next;
19+
p2 = p2.next.next;
20+
}
21+
return p1;
22+
}
23+
24+
private ListNode reverseLinkedList(ListNode head) {
25+
ListNode preCurrent = head.next;
26+
while(preCurrent.next != null){
27+
ListNode current = preCurrent.next;
28+
preCurrent.next = current.next;
29+
current.next = head.next;
30+
head.next = current;
31+
}
32+
return head;
33+
}
34+
35+
// 1->2->3->6->5->4 to 1->6->2->5->3->4
36+
private void interleaveNodes(ListNode head, ListNode preMiddle) {
37+
ListNode p1 = head;
38+
ListNode p2 = preMiddle.next;
39+
while(p1 != preMiddle){
40+
preMiddle.next = p2.next;
41+
p2.next = p1.next;
42+
p1.next = p2;
43+
p1 = p2.next;
44+
p2 = preMiddle.next;
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)