给定一个单链表的头结点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->valval) 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文章
7633浏览量
142172 -
代码
+关注
关注
30文章
4906浏览量
71030 -
数据结构
+关注
关注
3文章
573浏览量
40799 -
单链表
+关注
关注
0文章
13浏览量
7023
原文标题:数据结构:单链表的排序
文章出处:【微信号:嵌入式攻城狮,微信公众号:嵌入式攻城狮】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
数据结构中最简单的链表
Linux Kernel数据结构:链表
你知道Linux内核数据结构中双向链表的作用?
什么是栈?数据结构中栈如何实现

评论