Skip to content

Commit 59284b5

Browse files
committed
reorder-list
1 parent 610367c commit 59284b5

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

reorder-list/chjung99.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
class Solution {
12+
public void reorderList(ListNode head) {
13+
Map<Integer, ListNode> order = new HashMap<>();
14+
ListNode start = head;
15+
int n = 0;
16+
17+
while (start != null) {
18+
order.put(n, start);
19+
start = start.next;
20+
n++;
21+
}
22+
23+
ListNode cur = head;
24+
List<Integer> newOrder = generateOrder(n);
25+
26+
for (int i = 0; i < n; i++) {
27+
int idx = newOrder.get(i);
28+
cur = order.get(idx);
29+
if (i + 1 < n) {
30+
cur.next = order.get(newOrder.get(i+1));
31+
} else {
32+
cur.next = null;
33+
}
34+
cur = cur.next;
35+
}
36+
}
37+
public List<Integer> generateOrder(int n) {
38+
List<Integer> reorder = new ArrayList<>();
39+
int[] asc = new int[n];
40+
int[] desc = new int[n];
41+
42+
for (int i = 0; i < n; i++) {
43+
asc[i] = i;
44+
desc[i] = n - 1 - i;
45+
}
46+
47+
for (int i = 0; i< n; i++) {
48+
if (i % 2 == 0) {
49+
reorder.add(asc[i/2]);
50+
} else {
51+
reorder.add(desc[i/2]);
52+
}
53+
}
54+
return reorder;
55+
}
56+
}
57+

0 commit comments

Comments
 (0)