zoukankan      html  css  js  c++  java
  • Reorder List

    Given a singly linked list LL0L1→…→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}.

    思路:

    1. 找出中间节点

    2. 把中间节点之后的后半部分链表反序

    3. 把前半部分链表及后半部分链表合并

    4. 把中间节点 指向 null

    /**
     * Definition for singly-linked list.
     * class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */
    public class Solution {
        public void reorderList(ListNode head) {
           int count = 0;
           ListNode midPoint = head;
           ListNode fastRunner = head;
    // while 结束时 fastRunner指向的是最后一个点 mid指向的是中点,如果总数是偶数,指向的是晓得值
    while(fastRunner != null && fastRunner.next != null){ fastRunner = fastRunner.next.next; midPoint = midPoint.next; count++; } if(count < 1 || midPoint.next == null) return; fastRunner = midPoint.next; ListNode runner = midPoint; while(fastRunner != null){ ListNode tmp = fastRunner.next; fastRunner.next = runner; runner = fastRunner; fastRunner = tmp; } ListNode frontRunner = head; ListNode backRunner = runner; while(frontRunner != midPoint && backRunner != midPoint){ ListNode tmp = backRunner.next; backRunner.next = frontRunner.next; frontRunner.next = backRunner; backRunner = tmp; frontRunner = frontRunner.next.next; } midPoint.next = null; } }
  • 相关阅读:
    Codeforces Round #319 (Div. 2) D
    因为网络请求是 异步的,
    ios真蛋疼,
    单例模式的两种实现,
    jump, jump,
    一点 误删,
    关于代理,
    button上的两个手势,
    数据,
    header 的蓝色,
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3555255.html
Copyright © 2011-2022 走看看