重排链表 LeetCode-重排链表(143)
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
要求进行节点交换
解题思路:
- 将所有节点存入栈中
- 依次出栈,从尾节点开始交错插入链表中
- 到达链表的中间结束
var reorderList = function(head) {
// 若链表为空或只有一个节点,那么就不用重排 if (!head || !head.next) { return } var p = head var h = head var stack = [] while (p) { stack.push(p) p = p.next }
// 根据链表长度是奇数还是偶数,计算结束条件 var len = stack.length / 2 + stack.length % 2 while (stack.length > len) { p = stack.pop() p.next = h.next h.next = p h = h.next.next } h.next = null }