LeetCode-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.
public void reorderList(ListNode head) {
        if(head==null){
            return ;
        }
        //找到中点
        ListNode fast = head;
        ListNode slow = head;
        while(slow !=null &&fast!= null && fast.next!=null){
            slow = slow.next;
            fast = fast.next.next;
        }
        ListNode mid = slow.next;
        slow.next = null;
        //反转链表
        ListNode newHead = null;//反转链表头结点
        ListNode cur = mid ;
        while(cur!=null){
            ListNode temp = cur.next;
            cur.next = newHead;
            newHead = cur;  
            cur = temp;
        }
        //reorder
        cur = head;
        while(cur!=null&& newHead !=null){
            ListNode temp = newHead.next;
            newHead.next = cur.next;
            cur.next = newHead;
            cur=cur.next.next;
            newHead=temp;
        }
    
    }
原文地址:https://www.cnblogs.com/zhacai/p/11154166.html