【LeetCode】Reorder List
来源:互联网 发布:淘宝海报背景素材 编辑:程序博客网 时间:2024/06/06 09:05
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}
.
思路:
先利用快慢指针找到链表中点,这个中点也是重排之后的尾结点。找到中点之后将链表分为前后两个链表,再将后面的链表逆序,然后依次从两个链表中取出头结点组成新的链表
class Solution {public: void reorderList(ListNode *head) { if (!head || !head->next || !head->next->next) { return; } // find the last and median nodes ListNode *slow, *fast; slow = fast = head; while (fast != NULL) { if (fast->next != NULL) { slow = slow->next; fast = fast->next->next; } else { break; } } ListNode *prev, *curr, *succ; prev = slow->next; curr = prev->next; succ = curr ? curr->next : NULL; prev->next = NULL; slow->next = NULL; // reverse list while (succ != NULL) { curr->next = prev; prev = curr; curr = succ; succ = succ->next; } // reverse the last two nodes if (curr == NULL) { // there only 1 node in list. curr = prev; } else { curr->next = prev; } ListNode *head_1 = head->next; ListNode *head_2 = curr; ListNode *tail = head; // merge two lists while (head_1 && head_2) { tail->next = head_2; head_2 = head_2->next; tail = tail->next; tail->next = head_1; head_1 = head_1->next; tail = tail->next; } tail->next = head_1 ? head_1 : (head_2 ? head_2 : NULL); }};
0 0
- [leetcode][list] Reorder List
- [leetcode][list] Reorder List
- Leetcode: Reorder List
- [LeetCode] Reorder List
- LeetCode题解:Reorder List
- Leetcode: Reorder List
- LeetCode:Reorder List
- leetcode之Reorder List
- Leetcode: Reorder List
- [LeetCode]Reorder List
- [LeetCode] Reorder List
- leetcode Reorder List
- LeetCode | Reorder List
- LeetCode Reorder List
- LeetCode 之 Reorder List
- Leetcode: Reorder List
- LeetCode OJ:Reorder List
- Reorder List (LeetCode)
- Android.mk简介
- 法规及人员大范甘迪过放电
- tomcat绑定域名
- OpenWrt中又见 iconv 错误
- 完整的缓冲运动框架
- 【LeetCode】Reorder List
- 加速计 :CMMotionManager 的startAccelerometerUpdatesToQueue 开始采集(push)使用
- 目标检测的图像特征提取之(一)HOG特征
- Linux企业级项目实践之网络爬虫(1)——项目概述及准备工作
- hdu 3496 DP
- OCP试题解析之053-16 MEMORY_TARGET
- BZOJ 1024: [SCOI2009]生日快乐
- xargs用法详解
- 文件重定向,getline()获取一样,屏幕输出流,格式控制符dec,oct,hex,精度控制setprecision(int num),设置填充,cout.width和file(字符),进制输入