您的位置:首页 > 其它

链表的插入排序

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: