LeetCode: 143. 重排链表
栈队列重新组建
线性表
Stack + Queue 直接重新编排整个链表
public void reorderList(ListNode head) { if(head == null || head.next == null || head.next.next == null) return ; ListNode left = head, right = head; Stack<ListNode> stack = new Stack<>(); Queue<ListNode> queue = new LinkedList<>(); int len = 0; // stack while (right != null){ stack.push(right); right = right.next; len++; } right = head; while (right != null){ queue.offer(right); right = right.next; } while (len > 1){ ListNode temp = stack.pop(); ((LinkedList<ListNode>) queue).pop().next = temp; temp.next = queue.peek(); len -= 2; } queue.peek().next = null; }线性表
public void reorderList(ListNode head) { if(head == null || head.next == null || head.next.next == null) return ; List<ListNode> list = new ArrayList<>(); ListNode temp = head; // 存入 list 中 while (temp != null){ list.add(temp); temp = temp.next; } for (int i = 0, j = list.size() - 1; i < list.size() / 2; i++, j--) { list.get(i).next = list.get(j); list.get(j).next = list.get(i + 1); if(i + 1 == list.size() / 2){ list.get(i + 1).next = null; } } }