单链表插入排序

来源:互联网 发布:气象数据 英文缩写 编辑:程序博客网 时间:2024/06/10 12:51

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

#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;}


0 0
原创粉丝点击