/**
* 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;
}
};
来源:https://www.cnblogs.com/ranranblog/p/5584778.html