zoukankan      html  css  js  c++  java
  • LeetCode解题报告:Reorder List

    Reorder List

    Given a singly linked list LL0→L1→…→Ln-1→Ln,
    reorder it to: L0→LnL1→Ln-1→L2→Ln-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}.

    思路:

    1.利用快慢两个指针将链表一分为二;

    2.针对第二个子链表求倒序;

    3.利用merge思想将两个子链表合并。

    代码:

     1 public class ReorderSingleList {
     2     /**
     3      * Definition for singly-linked list. class ListNode { int val; ListNode
     4      * next; ListNode(int x) { val = x; next = null; } }
     5      */
     6     public void reorderList(ListNode head) {
     7         if (head == null || (head.next == null)) {
     8             return;
     9         }
    10         // fast and slow point find the mid position.
    11         ListNode fast = head;
    12         ListNode slow = head;
    13         while ((fast != null) && (fast.next != null)) {
    14             fast = fast.next.next;
    15             slow = slow.next;
    16         }
    17 
    18         // reverse the last second list.
    19         ListNode headnode = new ListNode(-1);
    20         headnode.next = slow;
    21         ListNode temp = headnode.next;
    22         while (temp.next != null) {
    23             ListNode insert = temp.next;
    24             ListNode currNext = insert.next;
    25             insert.next = headnode.next;
    26             headnode.next = insert;
    27             temp.next = currNext;
    28         }
    29 
    30         // merge insert
    31         ListNode firstcur = head;
    32         ListNode secondcur = headnode.next;
    33         while (firstcur != slow && (secondcur != slow)) {// at first,I make a mistake in here;
    34             ListNode firstnex = firstcur.next;
    35             ListNode secondnex = secondcur.next;
    36             firstcur.next = secondcur;
    37             secondcur.next = firstnex;
    38             firstcur = firstnex;
    39             secondcur = secondnex;
    40         }
    41     }
    42 
    43     public static void main(String[] args) {
    44         ListNode t5 = new ListNode(5);
    45         ListNode t4 = new ListNode(4, t5);
    46         ListNode t3 = new ListNode(3, t4);
    47         ListNode t2 = new ListNode(2, t3);
    48         ListNode t1 = new ListNode(1, t2);
    49         new ReorderSingleList().reorderList(t1);
    50         System.out.println(t1);
    51     }
    52 
    53 }
    View Code
  • 相关阅读:
    faster rcnn学习(三)
    too many values to unpack (expected 2)
    RuntimeWarning: overflow encountered in ubyte_scalars
    C#中excel读取和写入
    C#中使用Sql对Excel条件查询
    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法IIS上部署MVC网站,打开后500错误
    C#微信公众平台账号开发,从零到整,步骤详细。
    VS快捷键大全
    ASP.NET将文件写到另一服务器
    开放api接口签名验证
  • 原文地址:https://www.cnblogs.com/byrhuangqiang/p/3794587.html
Copyright © 2011-2022 走看看