C++用链表实现n个数插入排序,从小到大排序。

时间: 2024-02-24 16:00:06 浏览: 19
好的,以下是C++代码实现: ```c++ #include <iostream> using namespace std; // 定义链表节点结构体 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {} }; // 定义插入排序函数 ListNode* insertionSortList(ListNode* head) { if (head == nullptr || head->next == nullptr) { return head; } ListNode *dummy = new ListNode(0); // 创建虚拟头节点 ListNode *cur = head; while (cur != nullptr) { ListNode *prev = dummy; while (prev->next != nullptr && prev->next->val < cur->val) { prev = prev->next; } ListNode *temp = cur->next; cur->next = prev->next; prev->next = cur; cur = temp; } return dummy->next; } // 打印链表 void printList(ListNode *head) { while (head != nullptr) { cout << head->val << " "; head = head->next; } cout << endl; } int main() { int n; cout << "Please input the number of nodes: "; cin >> n; // 创建链表 ListNode *head = nullptr, *tail = nullptr; for (int i = 0; i < n; i++) { int val; cin >> val; ListNode *newNode = new ListNode(val); if (tail == nullptr) { head = tail = newNode; } else { tail->next = newNode; tail = tail->next; } } cout << "Before sort: "; printList(head); head = insertionSortList(head); cout << "After sort: "; printList(head); return 0; } ``` 以上代码中,我们先根据用户输入的节点数和每个节点的值,创建链表。然后调用插入排序函数进行排序。在插入排序函数中,我们维护一个已排序区间,初始时只有一个节点,即虚拟头节点;然后从第一个节点开始遍历链表,把它插入到已排序区间中合适的位置。这里需要用到两个指针,一个指向已排序区间的最后一个节点,另一个指向当前待排序的节点。

相关推荐

用c++编写一个函数基于链表实现一个LinkedList类 内部元素的数据类型可以用template支持任意数据类型T,也可以简单固定为string,即T=string 要求支持: void push_back(const T& x) void push_front(const T& x) T pop_back() T pop_front() const T& peek_back() const T& peek_front() void remove(int i) 删除index为i的元素:front的index为0,back的index为length-1 bool contains(const T& x) bool is_empty() int length() void clear() string toString() ostream& operator<<(ostream& os, const LinkedList& list) istream& operator>>(istream& is, LinkedList& list) int find_first(const T& x) 返回x第一次出现的位置的index(最靠近front,也即index最小的),不存在则返回-1 int find_last(const T& x) 返回x最后一次出现的位置的index(最靠近back,也即index最大的),不存在则返回-1 void remove_first(const T& x) 删除第一次出现的x,如有 void remove_last(const T& x) 删除最后一次出现的x,如有 void remove(int start, int length) 从start开始删除(至多)length个元素 void insert(int i, const LinkedList& list) 将list中的元素逐一插入到i,i+1,i+2,...的位置 void replace(int start, int length, const LinkedList& list) 将start开始的(最多)length长的部分,替换成list中的元素 void sort() 将内部元素从小到大排序 LinkedList subList(int start, int length) 不要忘记必要的(不写会有问题的): 构造函数 拷贝构造函数 赋值运算符的重载 析构函数

最新推荐

recommend-type

对python实现合并两个排序链表的方法详解

今天小编就为大家分享一篇对python实现合并两个排序链表的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

C++双向链表实现简单通讯录

主要为大家详细介绍了C++双向链表实现简单通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言实现带头结点的链表的创建、查找、插入、删除操作

主要介绍了C语言实现带头结点的链表的创建、查找、插入、删除操作方法,对于了解数据结构中链表的各项操作有很好的借鉴价值,需要的朋友可以参考下
recommend-type

二叉排序树的实现与基本操作

二叉排序树又称二叉查找树。本文主要对二叉排序树的实现与基本操作进行详细介绍,以下代码实现了:1、二叉树的构建;2、二叉树的中、前、后、层序遍历;3、二叉树中结点的最大距离。下面就跟着小编一起来看下吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依