143. Reorder List(js)

143. Reorder List

Given a singly linked list LL0→L1→…→Ln-1→Ln,
reorder it to: L0→LnL1→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;
    }
};

 

posted @ 2019-06-15 21:42  mingL  阅读(168)  评论(0编辑  收藏  举报