28.png

    1. /*
    2. 按递增次序输出单链表各节点的数据元素,并释放节点所占的存储空间。
    3. 分析:
    4. 我们可以先进行排序,然后依次输出,并释放节点空间,我们也可以直接进行遍历,找到目前最小值进行输出,然后释放,注意不要断链
    5. 我们这里采取第二种方式
    6. */
    7. struct Link {
    8. int data;
    9. struct Link *next;
    10. };
    11. #include <stdio.h>
    12. #include <stdlib.h>
    13. void printAndDel(Link *h) {
    14. struct Link *pre = h, *p = h->next, *r,*min=h->next,*minPre=h;//为了操作的顺利进行,我们需要时刻保存节点的前驱与后继
    15. int count = 0;
    16. while (p) {
    17. count++;
    18. p = p->next;
    19. }
    20. p = h->next;
    21. printf("输出顺序为:\n");
    22. for (int i = 0; i < count;i++) {
    23. while (p) {
    24. if (p->data < min->data) {
    25. minPre = pre;
    26. min = p;
    27. }
    28. pre = p;
    29. p = p->next;
    30. }
    31. printf("%d ",min->data);
    32. r = min->next;
    33. minPre->next = min->next;
    34. free(min);
    35. pre = minPre = h;
    36. p = min = h->next;
    37. }
    38. printf("\n");
    39. }
    40. int main() {
    41. struct Link *head;
    42. Link *createLink(int);
    43. void printfNowLink(Link*);
    44. head = createLink(0);
    45. printAndDel(head);
    46. printfNowLink(head);
    47. return 0;
    48. }