这货是给新手的:C语言链表操作——把最小值调整至链表头

前些天解答了一个题目,比较基础的C语言链表操作,现在把它放出来,给初学者参考下。

题目要求:

已知非空线性链表由list指出,链结点的构造为(data,link).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点

测试用例:

Input
输入长度n: 6
输入数据: 4 2 6 88 34 6
Output:2 4 6 88 34 6

Sample Input
5
11 6 8 7 9
Sample Output
6 11 8 7 9

分析:

先允许我吐槽下 =,=。这货其实是最简单链表操作。思路是遍历链表节点,和第一个节点比较,如果比第一个小,那么把这个节点从原来的位置拿开,放到第一个位置即可。需要注意的是,操作某一节点时,应当记录一个指向上一节点的指针(这里的链表为单链表)。将上一节点的后继指向当前节点的后继,将当前节点的后继,指向链表的第一个节点,将链表头(为了方便,采用了带头结点的链表)的后继指向当前节点。OK。

代码:

点击下载此源代码

吐槽神马的:

作为一个不做C/C++的程序员,偶尔来写这个代码,让我想起来大一时候上C语言课,没太当会儿事儿,但是开发的能力却见长了。操作链表神马的,这些数据结构范畴内的东西对每个计算机专业的同学来说,都是最最基础的东西。大学上完职业所用到的,都是那些不管是不是熟练掌握了的东西,切勿拿它当儿戏。

最后,把大学三年读完的成绩单晒一晒,修习软件能力的同学们,加油咯。