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

leetcode - Reorder List

时间:2014-09-06 12:20:43      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   os   io   ar   for   

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,找到链表的中点,断开分为两部分,对链表的后半部分进行反转,然后再合并这两部分链表即可

代码:

bubuko.com,布布扣
 1 #include <stddef.h>
 2 
 3 struct ListNode
 4 {
 5     int val;
 6     ListNode *next;
 7     ListNode(int x) : val(x), next(NULL) {}
 8 };
 9 
10 class Solution {
11 public:
12     void reorderList(ListNode *head) {
13         if (!head || !head->next)
14         {
15             return;
16         }
17 
18         int length = 0;
19         ListNode *current = head;
20 
21         while (current)
22         {
23             current = current->next;
24             ++length;
25         }
26 
27         ListNode *firstHead = head;
28         int firstLength = length / 2 + length % 2;
29         ListNode *secondHead = NULL;
30         current = firstHead;
31 
32         for (int i = 0; i < firstLength; ++i)
33         {
34             current = current->next;
35         }
36         secondHead = current;
37 
38         //对second链表进行反转
39         ListNode dummy(-1);
40         dummy.next = secondHead;
41         ListNode *pre = secondHead;
42         current = secondHead->next;
43 
44         while (current)
45         {
46             pre->next = current->next;
47             current->next = dummy.next;
48             dummy.next = current;
49             current = pre->next;
50         }
51 
52         //合并first链表和second链表
53         ListNode *firstCur = firstHead;
54         ListNode *secondCur = dummy.next;
55         ListNode *temp = NULL;
56 
57         while (firstCur && secondCur)
58         {
59             temp = secondCur->next;
60             secondCur->next = firstCur->next;
61             firstCur->next = secondCur;
62 
63             firstCur = secondCur->next;
64             secondCur = temp;
65         }
66 
67         if (firstCur)
68         {
69             firstCur->next = NULL;
70         }
71     }
72 };
View Code

 

leetcode - Reorder List

标签:des   style   blog   http   color   os   io   ar   for   

原文地址:http://www.cnblogs.com/laihaiteng/p/3959266.html

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