File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments