单链表的插入排序
来源:互联网 发布:stackblur 算法 编辑:程序博客网 时间:2024/05/22 10:23
单链表的插入排序与数组的插入排序不同,我用了一种简单的方法来实现链表的插入排序,代码如下:
#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==NULL)return head;
ListNode *p = head;
ListNode *q= 0;
while (p!=NULL)
{
int currentVal = p->val; //获取当前值
q = insertionList(q,currentVal); //将当前值插入到链表正确的地方
p = p->next;
}
return q;
}
ListNode *insertionList(ListNode *head,int currentVal)
{
ListNode *p = head;
ListNode *tmp = new ListNode(currentVal); //新建一个节点
if(head == NULL) //如果链表是个空链表,则创建一个表头
{
head = new ListNode(currentVal);
return head;
}
if (currentVal<head->val) //如果插入的值比头结点还要小,那就插在头结点前面
{
tmp->next = p;
head = tmp;
return head;
}
else //将节点插入在合适的位置
{
while (p->next!=NULL)
{
if (currentVal>=p->val&¤tVal<=p->next->val) //如果传进来的值大于上一个节点而小于下一个节点,则插入
{
tmp->next = p->next;
p->next = tmp;
return head;
}
p = p->next;
}
p->next = tmp; //若是到了最后,就把此节点连接在最后即可
tmp->next = NULL;
return head;
}
}
};
void main()
{
Solution s;
ListNode *l1 = new ListNode(1);
l1->next = new ListNode(7);
l1->next->next = new ListNode(3);
l1->next->next->next = new ListNode(5);
l1->next->next->next->next = new ListNode(4);
ListNode *sortedList = s.insertionSortList(l1);
while (sortedList!=NULL)
{
cout<<sortedList->val<<endl;
sortedList = sortedList->next;
}
while(1);
}
- 单链表的插入排序
- 单链表的插入排序
- 单链表的插入排序
- 单链表的插入排序
- 单链表的插入排序
- 【leetcode】单链表的插入排序
- 单链表的直接插入排序
- 单链表的归并排序和插入排序
- 插入排序和插入排序的改进
- 排序的之插入排序
- 简单的排序---插入排序
- 单链表的创建,删除,插入,显示,排序
- 单链表的创建,删除,插入,排序
- 单链表的插入,删除排序操作
- 插入排序的实现
- 简单的插入排序
- 插入排序的实现
- 插入排序的实现
- 读《百度基础架构技术发展之路》有感
- cheap louis vuitton handbags-882603
- kali linux下的中文输入法安装及iceweasel汉化
- RCP中可以取消的进度条
- Spring AOP Sample
- 单链表的插入排序
- Codeforces Round #FF (Div. 2)D. DZY Loves Modification
- 什么是4P-4C--4R营销理论?
- java SQL语法解释器jsqlparser
- Effective C++ Item 35 考虑 virtual 函数以外的实现
- <img usemap="#Map">的用法
- 单链表的归并排序
- 2500 做一个正气的杭电人
- 2502 月之数