码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode解题报告:Reorder List

时间:2014-06-28 20:42:16      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   strong   

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思想将两个子链表合并。

代码:

bubuko.com,布布扣
 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

 

LeetCode解题报告:Reorder List,布布扣,bubuko.com

LeetCode解题报告:Reorder List

标签:des   style   blog   http   color   strong   

原文地址:http://www.cnblogs.com/byrhuangqiang/p/3794587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!