1. 题目
2. 分析
我们需要以以下顺序重新定义链表
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
主要的问题在于,链表这种数据结构我们没法以1的时间复杂度获取下标i的节点,最终需要n^2的复杂度。
因此,我们考虑将每一个节点都放到队列里,每次遍历的时候都是取头尾的数据。
3. 代码
public void reorderList(ListNode head) {
Deque<ListNode> deque = new ArrayDeque<>();
while (null != head) {
ListNode temp = head;
deque.addLast(head);
head = head.next;
temp.next = null;
}
ListNode newNode = new ListNode(0);
ListNode temp = newNode;
int t = 0;
while (!deque.isEmpty()) {
temp.next = t == 0 ? deque.pollFirst() : deque.pollLast();
temp = temp.next;
t++;
t %=2;
}
}