zoukankan      html  css  js  c++  java
  • Reorder List leetcode java

    题目

    Given a singly linked list L: L0L1→…→Ln-1Ln,
    reorder it to: L0LnL1Ln-1L2Ln-2→…

    You must do this in-place without altering the nodes' values.

    For example,
    Given {1,2,3,4}, reorder it to {1,4,2,3}.

    题解:

    题目要重新按照 L0LnL1Ln-1L2Ln-2→…来排列,看例子1->2->3->4会变成1->4->2->3,拆开来看,是{1,2}和{4,3}的组合,而{4,3}是{3,4}的逆序。这样问题的解法就出来了。

    第一步,将链表分为两部分。

    第二步,将第二部分链表逆序。

    第三步,将链表重新组合。

    代码如下:

     1     public void reorderList(ListNode head) {
     2         if(head==null||head.next==null)
     3             return;
     4         
     5         ListNode slow=head, fast=head;
     6         ListNode firsthalf = head;
     7         while(fast.next!=null&&fast.next.next!=null){
     8             slow = slow.next;
     9             fast = fast.next.next;
    10         }
    11         
    12         ListNode secondhalf = slow.next;
    13         slow.next = null;
    14         secondhalf = reverseOrder(secondhalf);
    15  
    16         while (secondhalf != null) {
    17             ListNode temp1 = firsthalf.next;
    18             ListNode temp2 = secondhalf.next;
    19  
    20             firsthalf.next = secondhalf;
    21             secondhalf.next = temp1;        
    22  
    23             firsthalf = temp1;
    24             secondhalf = temp2;
    25         }
    26         
    27     }
    28     
    29     public static ListNode reverseOrder(ListNode head) {
    30  
    31         if (head == null || head.next == null)
    32             return head;
    33  
    34         ListNode pre = head;
    35         ListNode curr = head.next;
    36  
    37         while (curr != null) {
    38             ListNode temp = curr.next;
    39             curr.next = pre;
    40             pre = curr;
    41             curr = temp;
    42         }
    43  
    44         // set head node's next
    45         head.next = null;
    46  
    47         return pre;
    48     }

     Reference://http://www.programcreek.com/2013/12/in-place-reorder-a-singly-linked-list-in-java/

  • 相关阅读:
    count(*) 和 count(1)和count(列名)区别
    网页横向滚动条
    发送公众号模板消息
    tp中S与session()
    php 判断sql执行时间
    thinkphp联查
    php 获取当前时间
    微信分享
    测试用手机奇怪问题
    翻译|多少植物才能净化室内空气?
  • 原文地址:https://www.cnblogs.com/springfor/p/3869333.html
Copyright © 2011-2022 走看看