博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表递归排序
阅读量:7064 次
发布时间:2019-06-28

本文共 1537 字,大约阅读时间需要 5 分钟。

问题描述

输入以空格隔开的数字,使用链表递归升值排序。如输入:12 5 7 8 9 8 输出:5 7 8 8 9 12


#include 
#include
#define LEN sizeof(SNODE)typedef struct node{ int num; struct node *next;}SNODE;//打印函数void print(SNODE *head){ head=head->next; while(head!=NULL) { printf("%d ",head->num); head=head->next; } putchar('\n');}//print//建表函数void creatLink(int n,SNODE *head){ SNODE *p,*q; p=head; while(p->next!=NULL) p=p->next;//找到最后一个节点 q=(SNODE*)malloc(LEN); q->num=n; q->next=NULL; p->next=q;}//creatLink//排序函数SNODE* sortLink(SNODE *head){ SNODE *p=head,*q=head; if(head->next!=NULL) //链表非空 { while(p->next!=NULL) { if(p->next->num < q->next->num)//查找最小节点 { q=p; //q指向最小节点的前一个节点 } p=p->next; } p=q->next; //p指向本轮最小节点 q->next=q->next->next; //将本轮最小节点从链表中剔除 p->next=head->next; //将原来头节点后的节点接到最小节点的后面 head->next=p; //将最小节点接到头节点后面 sortLink(head->next); //将最小节点作为头节点进行递归调用 } return head;}//sortLinkint main(){ SNODE *head; head=(SNODE*)malloc(LEN);//创建头节点 head->next=NULL; head->num=-1; int n; char c; while(1) { scanf("%d",&n);//读入一个整形 creatLink(n,head);//加入链表 c=getchar();//吃掉空格 if(c=='\n') break; } print(head);//打印原链表 sortLink(head);//递归排序 print(head);//打印排序后的链表 return 0;}//main

转载于:https://www.cnblogs.com/DismalSnail/p/10543179.html

你可能感兴趣的文章
轻巧的网络流量实时监控工具NTOPNG
查看>>
Exchange 2013部署系列之(八)邮箱、通讯组创建及规划
查看>>
贪心初步-A - Doing Homework again
查看>>
[CTO札记]盛大文学公司名称对联
查看>>
AD DS最佳实践分析程序(BPA)应用实例---扫描并归档结果
查看>>
RAC 开启gsd和oc4j服务
查看>>
MYSQL 动态变量赋值不对的情况
查看>>
Android应用程序组件Content Provider的启动过程源代码分析(7)
查看>>
Nginx实战基础篇一 源码包编译安装部署web服务器
查看>>
IDEA编译时候出现问题:代码不提示错误,编译时出错解决办法
查看>>
简述WebService与.NET Remoting的区别及适应场合
查看>>
Oracle EBS 如何生成trace文件
查看>>
[存档]名词解释
查看>>
老树新芽,在ES6下使用Express
查看>>
【实验】修改数据文件名字的三种途径
查看>>
Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法与解析【转】
查看>>
把用户加入sudo
查看>>
heroku 上部署node.js的几个注意点
查看>>
How to: Define a Conversion Operator [msdn]
查看>>
android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播...
查看>>