File tree 2 files changed +48
-1
lines changed
2 files changed +48
-1
lines changed Original file line number Diff line number Diff line change 127
127
| 139 | [ Word Break] ( https://leetcode.com/problems/word-break ) | [ ![ Java] ( assets/java.png )] ( src/WordBreak.java ) | |
128
128
| 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 ) | |
129
129
| 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 ) | |
131
131
| 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 ) | |
132
132
| 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 ) | |
133
133
| 146 | [ LRU Cache] ( https://leetcode.com/problems/lru-cache ) | [ ![ Java] ( assets/java.png )] ( src/LRUCache.java ) | |
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments