143. Reorder List
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example 1:
Given 1->2->3->4, reorder it to 1->4->2->3.
Example 2:
Given 1->2->3->4->5, reorder it to 1->5->2->4->3.
题意:对链表重新排列,倒数第i个节点接在第i个节点之后
代码如下:
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @return {void} Do not return anything, modify head in-place instead. */ var reorderList = function(head) { if(!head || !head.next || !head.next.next) return; let slow=head,fast=head; while(fast.next && fast.next.next){ slow=slow.next; fast=fast.next.next; } let mid=slow.next; slow.next=null; let last=mid,pre=null; while(last){ let next=last.next; last.next=pre; pre=last; last=next; } while(head && pre){ let next=head.next; head.next=pre; pre=pre.next; head.next.next=next; head=next; } };