给定一个单链表的头结点head(该结点有值),长度为n的无序单链表,对其按升序排序后,返回新链表。如当输入链表 {3,1,4,5,2} 时,经升序排列后,原链表变为 {1,2,3,4,5},对应的输出为 {1,2,3,4,5}。
代码实现
C语言代码:
structListNode*sortInList(structListNode*head){ if(head==NULL) returnNULL; //添加一个头指针,指向head,方便后面的排序 structListNode*H; H=malloc(sizeof(structListNode)); H->next=head; //第一步:定义三个指针 structListNode*p,*q,*r; //第二步:将p指向head,并将头指针断开链接 p=H->next; H->next=NULL; //遍历链表 while(p) { //第三步:q指向当前要操作的结点,p后移,r指向头指针 q=p; p=p->next; r=H; //第四步:将r的后继数值与当前操作结点q的值进行比较 //若条件成立,r后移一个位置后,继续进行比较 //若条件不成立,跳出while循环,将q指向r的后继,r的后继指向q while(r->next&&r->next->val< q->val) r=r->next; q->next=r->next; r->next=q; } //第五步:返回头指针H的后继结点链表 returnH->next; }
图解代码
第一步:定义三个指针
第二步:将p指向head,并将头指针断开链接
第三步:q指向当前要操作的结点,p后移,r指向头指针
第四步:将r的后继数值与当前操作结点q的值进行比较:若条件成立,r后移一个位置后,继续进行比较;若条件不成立,跳出while循环,将q指向r的后继,r的后继指向q
第五步:返回头指针H的后继结点链表
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7598浏览量
136158 -
代码
+关注
关注
30文章
4742浏览量
68342 -
数据结构
+关注
关注
3文章
573浏览量
40090 -
单链表
+关注
关注
0文章
13浏览量
6915
原文标题:数据结构:单链表的排序
文章出处:【微信号:嵌入式攻城狮,微信公众号:嵌入式攻城狮】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
数据结构中最简单的链表
数据结构作为嵌入式工程师必修课程之一,今天,我们就来讲一讲数据结构中最简单的链表,包含链表的初始化、插入和遍历操作。 链表在项目开发中使用的
发表于 06-13 17:40
•355次阅读
Linux Kernel数据结构:链表
Linux Kernel数据结构:链表原创 2016年10月20日 22:58:25标签:LINUX/kernel/链表 数据结构数据结构中
发表于 09-25 16:41
你知道Linux内核数据结构中双向链表的作用?
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到。我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为广泛的
发表于 05-14 17:27
•1868次阅读
什么是栈?数据结构中栈如何实现
今天放松一下,我们来看看数据结构中的栈,这节的知识点可以说是数据结构中最容易上手的知识点了,其实比起链表,其实链表也有栈和队列的模型,链表的
发表于 04-29 18:25
•0次下载
解析数据结构的常用七大排序算法
为了让大家掌握多种排序方法的基本思想,本篇文章带着大家对数据结构的常用七大算法进行分析:包括直接插入排序、希尔排序、冒泡排序、快速
评论