zoukankan      html  css  js  c++  java
  • leetcode 143. Reorder List ----- java

    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、使用list记录链表。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public void reorderList(ListNode head) {
            
            List<ListNode> list = new ArrayList<ListNode>();
            ListNode node = head;
            while( node != null ){
                list.add(node);
                node = node.next;
            }
            int len = list.size();
            if( len < 3)
                return ;
    
            node = head;
            node.next = list.get(len-1);
            node = node.next;
            for( int i = 1;i<len/2;i++){
    
                node.next = list.get(i);
                node.next.next = list.get(len-1-i);
                node = node.next.next;
            }
            if( len%2 != 0){
                node.next = list.get(len/2);
                node = node.next;
            }
            node.next = null;
    
            return ;
        }
    }

    2、使用双向队列。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public void reorderList(ListNode head) {
            
            Deque<ListNode> deque = new ArrayDeque<ListNode>();
    
            ListNode node = head;
    
            while( node != null ){
                deque.add( node );
                node = node.next;
            }
            if( deque.size() < 3)
                return ;
            node = deque.poll();
            node.next = deque.pollLast();
            node = node.next;
            while( !deque.isEmpty() ){
                node.next = deque.poll();
                node.next.next = deque.pollLast();
                node = node.next.next;
            }
            if( node != null )
                node.next = null;
            return ;
        }
    }

    3、不使用额外空间,找到中间点,然后将后半部分链表反转,然后将两个链表合并即可。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public void reorderList(ListNode head) {
            
            
            if( head == null || head.next == null || head.next.next == null )
                return ;
            ListNode slow = head;
            ListNode fast = head.next;
            while( fast!= null && fast.next != null){
                fast = fast.next.next;
                slow = slow.next;
            }
            
            ListNode node2 = slow;
            fast = slow.next;
            
            while( fast != null ){
                
    
                ListNode node = fast.next;
                fast.next = slow;
                slow = fast;
                fast = node;
                
    
            }
            node2.next = null;
            node2 = slow;
            ListNode node1 = head;
            
            while( node1 != null   ){
                ListNode node = node1.next;
                ListNode nn = node2.next;
                node1.next = node2;
                node2.next = node;
                node1 = node;
                node2 = nn;
            }
            
            
    
            return ;
        }
    }
  • 相关阅读:
    正则表达式邮箱验证
    C# TCP应用编程三 异步TCP应用编程
    C# EventWaitHandle类解析
    Git关联远程仓库
    cqyz oj | 表亲结点 | 树上搜索
    cqyz oj | 健美操 | 树形DP | 二分猜答案
    cqyz oj | 树的分治 | 树形DP | 树的重心
    cqyz oj | 化装晚会加强版 | 二分搜索
    cqyz oj | 化装晚会 | 二分搜索 | 贪心
    POJ 1694 古老的游戏 | 贪心 | 树形DP
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/6068310.html
Copyright © 2011-2022 走看看