Reorder List --LeetCode
2015-07-31 23:15
399 查看
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
核心在与双指针如何控制slow指针落在合适的位置,
如果需要落在中间偏左则需要从head之前的节点开始遍历;
如果需要落在中间偏右,则直接从head开始遍历。
/**
* 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==NULL || head->next==NULL)
return;
ListNode* slow=head;
ListNode* fast=head;
while(fast && fast->next){
slow=slow->next;
fast=fast->next->next;
}
ListNode* h=slow->next;
slow->next=NULL;
stack<ListNode*> s;
while(h){
s.push(h);
h=h->next;
}
ListNode* p=head;
while(!s.empty() && p){
ListNode* tmp=s.top();
s.pop();
tmp->next=p->next;
p->next=tmp;
p=p->next->next;
}
}
};
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}.
核心在与双指针如何控制slow指针落在合适的位置,
如果需要落在中间偏左则需要从head之前的节点开始遍历;
如果需要落在中间偏右,则直接从head开始遍历。
/**
* 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==NULL || head->next==NULL)
return;
ListNode* slow=head;
ListNode* fast=head;
while(fast && fast->next){
slow=slow->next;
fast=fast->next->next;
}
ListNode* h=slow->next;
slow->next=NULL;
stack<ListNode*> s;
while(h){
s.push(h);
h=h->next;
}
ListNode* p=head;
while(!s.empty() && p){
ListNode* tmp=s.top();
s.pop();
tmp->next=p->next;
p->next=tmp;
p=p->next->next;
}
}
};
相关文章推荐
- Android如何让软键盘出现和消失
- spark源码分析--Master和worker建立连接
- 【JAVA】浅谈java内部类
- Xamarin.Forms 优秀UI界面
- 7.31 Django学习第三章
- day02_变量_基本数据类型_数据类型的转换_Scanner_20150731
- HDU - 2066 一个人的旅行
- linux性能评测工具2-Google perftools
- Struts2 零配置(一)—配置文件 vs 零配置
- MAC 设置环境变量path的几种方法
- java中使用日志组件和mysql数据库
- 弗洛伊德算法
- maven的使用和入门
- Mysql字符集以及校对规则
- excel导入MySQL 学习
- 用手机调试Android手机连上没反应解决办法
- 云存储基础架构剖析
- [V1.0]小木虫路径搜索问题C语言处理方案
- 神经网络-并行BP算法
- oracle-循环