Reorder List
2015-07-28 20:29
393 查看
描述
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}.
中文:将链表重新排序,一个是升序,一个是降序。
分析:
思路就是:
1 用快慢指针找到中间节点
2 翻转中间节点后一个元素到最后一个元素区间的所有元素
3 断开前半段和翻转后的后半段元素
4 把前半段和翻转后的后半段元素以交叉的方式合并起来
5 特殊处理输入为空,只有一个元素和只有两个元素的corner case,就是多加几个if…return
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}.
中文:将链表重新排序,一个是升序,一个是降序。
分析:
思路就是:
1 用快慢指针找到中间节点
2 翻转中间节点后一个元素到最后一个元素区间的所有元素
3 断开前半段和翻转后的后半段元素
4 把前半段和翻转后的后半段元素以交叉的方式合并起来
5 特殊处理输入为空,只有一个元素和只有两个元素的corner case,就是多加几个if…return
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: void reorderList(ListNode *head) { if (head == nullptr || head->next == nullptr) return; ListNode *slow = head, *fast = head, *prev = nullptr; while (fast && fast->next) { prev = slow; slow = slow->next; fast = fast->next->next; } prev->next = nullptr; // cut at middle slow = reverse(slow); // merge two lists ListNode *curr = head; while (curr->next) { ListNode *tmp = curr->next; curr->next = slow; slow = slow->next; curr->next->next = tmp; curr = tmp; } curr->next = slow; } ListNode* reverse(ListNode *head) { if (head == nullptr || head->next == nullptr) return head; ListNode *prev = head; for (ListNode *curr = head->next, *next = curr->next; curr; prev = curr, curr = next, next = next ? next->next : nullptr) { curr->next = prev; } head->next = nullptr; return prev; } };
相关文章推荐
- 判断单链表是否有环以及环的连接点
- 百练2757最长上升子序列
- IndexError: list index out of range的错误原因
- JSP概述
- 渣渣ACM日记——3461-Oulipo(POJ)
- VS中使用TinyXml操作xml文件
- Android ViewPager引导页(三)
- prim最小生成树算法题poj2485
- OpenGL关于glBegin的参数的理解
- I/O复用中,epoll 和select 的区别,以及epoll和select的实例
- 计算机网络读书笔记-----网络层
- Ubuntu 12.04 安装 Apache2+PHP5+MySQL
- 使用 malloc 的一个小问题
- UI__UIGestureRecognize
- 母函数模板解释
- 7.28多校1004——模拟——Painter
- 枚举
- Object类、JAVA反射机制、Annotation功能
- hdu 3635 并查集
- Linux LAMP 搭建