单链表插入排序
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; }
相关文章推荐
- 插入排序
- php实现插入排序
- Java数据结构及算法实例:插入排序 Insertion Sort
- javascript数据结构之双链表插入排序实例详解
- c++几种基本的插入排序(图文)
- C 语言插入排序算法及实例代码
- Java排序算法总结之插入排序
- JAVA算法起步之插入排序实例
- 详解直接插入排序算法与相关的Java版代码实现
- java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)
- python插入排序算法的实现代码
- Python中使用插入排序算法的简单分析与代码示例
- js算法: inserting sort 插入排序
- Python中使用插入排序算法的简单分析与代码示例
- 插入排序
- 数据结构与算法学习-简单排序算法之插入排序
- 插入排序
- 插入排序
- 排序算法 java版本
- 插入排序