您的位置:首页 > 其它

单链表插入排序

2016-07-22 18:34 351 查看
单链表插入排序算法基本思想是构建一个新的有序链表头结点,并将原来的链表节点依次插入到新建的有序链表中。代码如下:

#include "stdafx.h"
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head==nullptr || head->next==nullptr)
return head;
ListNode *pTemp1,*pTemp2,*pTemp2Pre;
ListNode Result(INT_MIN);
for(pTemp1=head;pTemp1!=nullptr;)
{
for(pTemp2=&Result;pTemp2!=nullptr && pTemp2->val<=pTemp1->val; pTemp2Pre=pTemp2,pTemp2=pTemp2->next)
{
;
}
ListNode *TmpNext=pTemp1->next;
pTemp1->next=pTemp2Pre->next;
pTemp2Pre->next=pTemp1;
pTemp1=TmpNext;
}
return Result.next;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
struct ListNode head(-1);
int inputNodeNum=0;
struct ListNode *pHead=&head;
Solution sln;
while (cin>>inputNodeNum)
{
int valTmp=0;
for (int i=0;i<inputNodeNum;++i)
{
cin>>valTmp;
pHead->next=new struct ListNode(valTmp);
pHead=pHead->next;
}
struct ListNode* pResult=sln.insertionSortList(head.next);
struct ListNode* pTmpResult=pResult;
while(pTmpResult!=nullptr)
{
cout<<pTmpResult->val<<"  ";
pTmpResult=pTmpResult->next;
}
while(pResult!=nullptr)
{
pTmpResult=pResult;
pResult=pResult->next;
delete pTmpResult;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息