将一个链表进行降序排列
2017-08-08 17:10
232 查看
题目:设head指向一个非空单向链表。将该链表的数据值进行降序排列
算法思路:
通过循环找到链表中的最小值,将最小值从链表中移除,利用头插的方式重新创建一个链表,即得到将序排列的链表。
也可以找到链表中的最大值采取头插的方式,也可以得到答案。
但是头插的方式多加了if语句,效率会降低,可读性也比较差,算法如下:
算法思路:
通过循环找到链表中的最小值,将最小值从链表中移除,利用头插的方式重新创建一个链表,即得到将序排列的链表。
ElemSN* desSort(ElemSN *h) { ElemSN *hn = NULL, *p = NULL, *q = NULL, *pmin = NULL,*qmin=NULL; while (h) { for (p = h,pmin=h; p;q=p,p=p->next)//循环找到链表中的最小值 { if(p->data < pmin->data) { pmin = p; qmin = q; } } if (pmin == h)//如果最小值节点是头结点 { h = h->next;//将该最小值节点从链表上移除 } else { qmin->next = pmin->next;//将该最小值节点从链表上移除 } //头插的方式创建一个新链表 pmin->next = hn;//将新节点头插到降序链表中 hn = pmin;//将原来的头结点指向现在的头结点 } return hn;//返回降序链表的节点 }
也可以找到链表中的最大值采取头插的方式,也可以得到答案。
但是头插的方式多加了if语句,效率会降低,可读性也比较差,算法如下:
ElemSN* Des_Sort(ElemSN *h) { ElemSN *p = null, *q, *pmax = null, *qmax, *hn = null,*pn=null,*tail=null; while (h) { q = null; qmax = null; //遍历链表找到最大值 for (p = h->next, pmax = h; p; q = p, p = p->next) { if (pmax->data < p->data) { pmax = p; qmax = q; } } if (pmax == h)//最大值是头结点,则头结点向后移 { h = h->next; } if (qmax)//原始链表的结点有多个,刨除最大值,进行挂链(剩一个不处理) { qmax->next = pmax->next; } //尾插方式创建降序链表 pmax->next = null;//最大直结点初始化 if (!hn) { hn = pmax; tail = pmax; } else { tail->next = pmax;//挂链 tail = pmax;//挪尾指针 } } return hn; }
相关文章推荐
- 建立一个成绩按降序排列的链表
- 将一个升序排列的单链表和一个降序排列的单链表合并成一个升序排列的单链表(优酷土豆2014校园招聘笔试题)
- 将两个升序排列的单链表合并为一个降序排列的单链表且不增加新的结点
- 编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,基数下标的元素不变
- 传入一个数组进行排列,奇数在前升序,偶数在后降序,在程序执行中不能开辟新数组空间
- mysql5.7基础 select...order by...desc 按照一个字段进行降序排列
- 请通过代码实现以下功能:输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列。
- 降序排列——对于一个大于3位数的任意整数
- 冒泡排序--对数组中的元素进行降序排列
- 对一个存储学生信息的单向链表,按照学号升序对链表进行排序,每个节点包含了一个学生ID
- (使用STL自带的排序函数进行编程7.3.14)UVA 10062 Tell me the frequencies!(求一个字符出现的次数(包括字母和数字)&&按出现的次数降序)
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 对一个单链表进行逆序排列。
- (五)、利用命令行参数输入三个整数,并对三个数字进行降序排列
- 根据条件,进行升序或降序排列,两种方式的比较。
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- 对一个二维数组中的某个值进行降序排行
- WV.9-动态链表-插入一个数到有序链表中并按原序排列
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和