codeTop100题(28)143. 重排链表

38 阅读1分钟

1. 题目

143. 重排链表

2. 分析

image.png

我们需要以以下顺序重新定义链表

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;
    }
}