reorder-list(Leetcode)

原创 2016年05月31日 16:48:21

题目描述

Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→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}.
根据提议,可以将问题分解为一下几个步骤解决。

  • 找到链表的中间结点
  • 将链表的后半部分反转(中间结点之后的部分)
  • 将链表的前半部分和后半部分进行重排
package sxd.learn.java.leetcode;

/**
 * 
 * @author lab
 * 2016/5/30
 * linked-list-cycle-ii
 * Given a linked list, return the node where the cycle begins. If there is no cycle, return null. 
 */
public class Leetcode9 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        ListNode node5 = new ListNode(5);
        ListNode node6 = new ListNode(6);

        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node3;

        System.out.println(detectCycle(node1).val);
    }

    public static ListNode detectCycle(ListNode head) {
        if(head == null)
            return null;
        ListNode fast = head;
        ListNode slow = head;

        boolean isCycle = false;

        while(fast.next != null && fast.next.next != null){
            fast = fast.next.next;
            slow = slow.next; 
            if(slow.equals(fast)){
                isCycle = true;
                break;
            }
        }

        if(isCycle){
            fast = head;
            while(!fast.equals(slow)){
                fast = fast.next;
                slow = slow.next;
            }
            return fast;
        }else{
            return null;
        }

    }
}

Reorder List 链表首尾交叉排列@LeetCode

思路就是: 1 用快慢指针找到中间节点 2 翻转中间节点后一个元素到最后一个元素区间的所有元素 3 断开前半段和翻转后的后半段元素 4 把前半段和翻转后的后半段元素以交叉的方式合并起来 5 特殊处理输...

LeetCode Reorder List O(n) space空间解法

前面用了O(1)空间的解法,但是我觉得不是那么好理解,然后向用O(n)空间,看看能不能加速一下运行速度。但是结果运行速度都是一样的。看来还是前面一种方法好点,不过这种方法的优点就是我觉得比较好理解。 ...

leetcode143. Reorder List

143. Reorder ListGiven a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-...

leetcode:Reorder List

问题 Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must...

leetcode题解-143. Reorder List

题目Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do t...

LeetCode 143 Reorder List (链表 Map或快慢指针 推荐)

LeetCode 143 Reorder List (链表 Map或快慢指针 推荐)

LeetCode_Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must d...

Leetcode reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must d...
  • Jimber
  • Jimber
  • 2014年06月19日 17:04
  • 423

LeetCode 143. Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must d...

[LeetCode] Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do t...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:reorder-list(Leetcode)
举报原因:
原因补充:

(最多只允许输入30个字)