
/* 按递增次序输出单链表各节点的数据元素,并释放节点所占的存储空间。 分析: 我们可以先进行排序,然后依次输出,并释放节点空间,我们也可以直接进行遍历,找到目前最小值进行输出,然后释放,注意不要断链 我们这里采取第二种方式*/struct Link { int data; struct Link *next;};#include <stdio.h>#include <stdlib.h>void printAndDel(Link *h) { struct Link *pre = h, *p = h->next, *r,*min=h->next,*minPre=h;//为了操作的顺利进行,我们需要时刻保存节点的前驱与后继 int count = 0; while (p) { count++; p = p->next; } p = h->next; printf("输出顺序为:\n"); for (int i = 0; i < count;i++) { while (p) { if (p->data < min->data) { minPre = pre; min = p; } pre = p; p = p->next; } printf("%d ",min->data); r = min->next; minPre->next = min->next; free(min); pre = minPre = h; p = min = h->next; } printf("\n");}int main() { struct Link *head; Link *createLink(int); void printfNowLink(Link*); head = createLink(0); printAndDel(head); printfNowLink(head); return 0;}