链表的插入排序
2016-06-14 17:26
281 查看
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head==NULL || head->next==NULL)
return head;
ListNode *phead1=new ListNode(head->val);//重新建立一个链表
ListNode *phead2=phead1;//临时节点
ListNode *p=head->next;
while(p)
{
if(p->val<phead1->val)//当当前节点的值小于头节点时,插入链表头部
{
phead2=p->next;//保存当前节点的后一个节点
p->next=phead1;
phead1=p;
p=phead2;//后移
}else
{
ListNode *tmp=phead1;//保存头节点
while(phead1->next!=NULL && phead1->next->val<p->val)
phead1=phead1->next;
if(phead1->next==NULL)//如果phead1已到最后一个节点
{
phead2=p->next;//保存下一个节点
phead1->next=p;
phead1->next->next=NULL;//保证新建的链表尾部为空
p=phead2;
phead1=tmp;//返回头节点
}
else//否则插入phead1和phead1->next中间
{
phead2=p->next;
p->next=phead1->next;
phead1->next=p;
p=phead2;
phead1=tmp;
}
}
}
return phead1;
}
};
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head==NULL || head->next==NULL)
return head;
ListNode *phead1=new ListNode(head->val);//重新建立一个链表
ListNode *phead2=phead1;//临时节点
ListNode *p=head->next;
while(p)
{
if(p->val<phead1->val)//当当前节点的值小于头节点时,插入链表头部
{
phead2=p->next;//保存当前节点的后一个节点
p->next=phead1;
phead1=p;
p=phead2;//后移
}else
{
ListNode *tmp=phead1;//保存头节点
while(phead1->next!=NULL && phead1->next->val<p->val)
phead1=phead1->next;
if(phead1->next==NULL)//如果phead1已到最后一个节点
{
phead2=p->next;//保存下一个节点
phead1->next=p;
phead1->next->next=NULL;//保证新建的链表尾部为空
p=phead2;
phead1=tmp;//返回头节点
}
else//否则插入phead1和phead1->next中间
{
phead2=p->next;
p->next=phead1->next;
phead1->next=p;
p=phead2;
phead1=tmp;
}
}
}
return phead1;
}
};
相关文章推荐
- [转]菜鸟程序员之Asp.net MVC Session过期异常的处理
- Netbeans设置ClassPath
- 预处器的对比——Sass、LESS和Stylus
- keytool 错误: java.lang.Exception: 所输入的不是 X.509 证书
- 文章标题
- logcat 设置缓存区 设置buff
- android客户端学习-json解析
- 移动App统计指标汇总
- 软件设计模式 B卷
- YCM的安装和配置
- Centos7 下安装Qt create
- IP地址类
- Android 智能TV电视系统遥控器键值添加
- Leetcode刷题系列(六)Merge Array&&List
- ViewStub的简单使用
- 编译64位geos库的经验总结
- hadoop下操作hive(与本机mysql元数据关联)
- C++----函数指针
- Office 365 身份验证和单一登录部署(2)
- flume-1.6.0 高可用测试&&数据入Kafka