时间复杂度O(n),额外空间复杂度O(n)
import java.util.*;
public class Solution {
private Map<Integer, ListNode> map = new HashMap<>();
public void reorderList(ListNode head) {
if (head == null || head.next == null) {
return;
}
int size = storeIntoMap(head);
for (int i = 0,j=size-1;i <= j; i++,j--) {
ListNode top = map.get(i);
ListNode tail = map.get(j);
if (i == j) {
top.next = null;
break;
}
if (tail != top.next) {
tail.next = top.next;
} else {
tail.next = null;
}
top.next = tail;
}
}
public int storeIntoMap(ListNode node) {
int i = 0;
while(node != null) {
map.put(i++, node);
node = node.next;
}
return i;
}
}借助map记录每个索引位置上的节点,然后重组链表即可,需要考虑数据的奇偶个数和最后一个节点的next指针处理。

京公网安备 11010502036488号