LeetCode 143. Reorder List
2016-05-17 08:58
459 查看
首先将链表分成前半部分和后半部分两个链表,将后一个链表倒序,然后将两个链表合二为一。
特别注意:输入为空链表和链表中的个数只有1或者2个的时候。
class Solution {
public:
void reorderList(ListNode* head) {
if(head==NULL)
return;
ListNode* p;
int length=0;
ListNode* end;
for(p=head;p!=NULL;)
{
length++;
end=p;
p=p->next;
}
//cout<<length<<endl;
if(length==1||length==2)
return;
p=head;
for(int i=0;i<length-length/2-1;i++)
{
p=p->next;
}
//cout<<p->val<<endl;
//cout<<end->val<<endl;
ListNode* q;
q=p->next;
p->next=NULL;
p=q;
while(p!=end)
{
q=p->next;
p->next=end->next;
end->next=p;
p=q;
}
p=end;
q=head;
while(p!=NULL)
{
end=end->next;
p->next=q->next;
q->next=p;
q=p;
q=q->next;
p=end;
}
}
};
特别注意:输入为空链表和链表中的个数只有1或者2个的时候。
class Solution {
public:
void reorderList(ListNode* head) {
if(head==NULL)
return;
ListNode* p;
int length=0;
ListNode* end;
for(p=head;p!=NULL;)
{
length++;
end=p;
p=p->next;
}
//cout<<length<<endl;
if(length==1||length==2)
return;
p=head;
for(int i=0;i<length-length/2-1;i++)
{
p=p->next;
}
//cout<<p->val<<endl;
//cout<<end->val<<endl;
ListNode* q;
q=p->next;
p->next=NULL;
p=q;
while(p!=end)
{
q=p->next;
p->next=end->next;
end->next=p;
p=q;
}
p=end;
q=head;
while(p!=NULL)
{
end=end->next;
p->next=q->next;
q->next=p;
q=p;
q=q->next;
p=end;
}
}
};
相关文章推荐
- OpenGL矩阵变换
- 摇一摇
- 计步器
- 图片转为NSDasta
- CoreLocation Authorization in iOS8+
- tomcat 下 发布项目路径
- java 类和对象2
- SICP ex2-29
- 解析Java中PriorityQueue优先级队列结构的源码及用法
- 经纬度对应的距离
- iOS实现自定义的弹出视图(popView)
- 81. Search in Rotated Sorted Array
- Angularjs中的事件广播 ―全面解析$broadcast,$emit,$on
- 世界各国国家代码简称 - 备用
- java编码规范及优化总结
- 实现登录和注册透明,仿猎趣登录和注册界面实现
- Spring 事务属性
- 类似朋友圈或微博的动态界面,NineGridImageView(九宫格图片控件)
- css3新增属性
- CSS选择器优先级