码迷,mamicode.com
首页 > 其他好文 > 详细

143. Reorder List

时间:2018-10-12 11:03:45      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:部分   nbsp   insert   ever   eve   规则   span   tno   ||   

一、题目

  1、审题

  技术分享图片

  2、分析

    给出一个单向链表,将其重新排序,排序规则如上。

 

二、解答

  1、思路:

    方法一、

      观察上边的重新排序后的链表。可以分为三个步骤。

      ①、找到中间节点;

      ②、将后边部分的链表进行翻转。

      ③、在前边部分的链表中间隔插入后边部分链表的一个节点。

    public void reorderList(ListNode head) {
        if(head == null || head.next == null)
            return;
        
        ListNode walker = head;
        ListNode runner = head;
        // 1、find Mid
        while(runner.next != null && runner.next.next != null) {
            walker = walker.next;
            runner = runner.next.next;
        }
        ListNode midNode = walker;
        
        // 2、 reverse post
        ListNode pre = midNode.next;
        
        midNode.next = null;
        
        ListNode next = null;
        if(pre.next != null)
            next = pre.next;
        pre.next = null;
        
        while(pre != null && next != null) {
            ListNode nextAndNext = next.next;
            next.next = pre;
            pre = next;
            next = nextAndNext;
        }
        
        // 3、 insert nodes
        ListNode next2 = null;
        while(head != null && pre != null) {
            next = head.next;
            next2 = pre.next;
            
            head.next = pre;
            pre.next = next;
            
            head = next;
            pre = next2;
        }
    }

 

143. Reorder List

标签:部分   nbsp   insert   ever   eve   规则   span   tno   ||   

原文地址:https://www.cnblogs.com/skillking/p/9776154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!