• 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/

  • 相关阅读:
    在dubbo的一端,看Netty处理数据包,揭网络传输原理
    解惑:什么叫模型?
    拜托!不要再问我是否了解多线程了好吗
    微软职位内部推荐-Senior SW Engineer for Application Ecosystem
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-Senior Software Engineer_Azure
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
  • 原文地址:https://www.cnblogs.com/springfor/p/3869333.html
Copyright © 2020-2023  润新知