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/

  • 相关阅读:
    ACM
    Java实现排序
    HTML导出Excel文件(兼容IE及所有浏览器)
    WebForm应用log4net记录错误日志——使用线程列队写入
    @RefreshScope 配置方法
    Eclipse oxygen 版本汉化教程
    创建Dynamic Web Project时 显示最新Apache Tomcat 8.0 的方法
    微软汉字转拼音
    Ueditor 前后端分离实现文件上传到独立服务器
    汉字转拼音类(多音字)
  • 原文地址:https://www.cnblogs.com/springfor/p/3869333.html
Copyright © 2011-2022 走看看