当前位置:   article > 正文

(数据结构)单链表的建立——头插法、尾插法_尾插法建立单链表

尾插法建立单链表

尾插法代码实现: 

  1. LinkList Link_TailInsert(LinkList L)
  2. {
  3. L = (LNode*)malloc(sizeof(LNode)); //申请头结点,此处头结点的next不赋值为空
  4. if (L == NULL) //判断内存申请是否成功
  5. {
  6. return L;
  7. }
  8. LNode* s,*r; //两个指针指向头结点
  9. s = r = L;
  10. int x;
  11. scanf("%d",&x); //输入数据
  12. while (x != 9999) //结束判断条件
  13. {
  14. r = (LNode*)malloc(sizeof(LNode));//申请一个新节点,用p指针指向它
  15. r->data = x; //新节点数据
  16. s->next = r; //新节点连接在前一个结点之后
  17. s = r; //s指向新的表尾节点
  18. scanf("%d",&x);
  19. }
  20. s->next = NULL;
  21. return L;
  22. }

头插法代码实现: 

  1. LinkList Link_HeadInsert(LinkList L)
  2. {
  3. L = (LNode*)malloc(sizeof(LNode)); //初始化头结点
  4. if (L == NULL) //判断内存申请是否成功
  5. {
  6. return L;
  7. }
  8. L->next = NULL; //头结点的下一个节点赋值为空,防止其成为野指针
  9. int x;
  10. scanf("%d",&x); //输入数据
  11. while (x != 9999) //结束判断条件
  12. {
  13. LNode* p = (LNode*)malloc(sizeof(LNode)); //申请一个新节点,用p指针指向它
  14. p->data = x; //新节点赋值
  15. p->next = L->next; //新节点连接在头结点之后
  16. L->next = p;
  17. scanf("%d",&x);
  18. }
  19. return L;
  20. }

尾(头)插法建立的单链表用头(尾)插法建立一遍就完成了单链表的逆序 

全代码实现 :

  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. typedef struct LNode
  4. {
  5. int data;
  6. struct LNode* next;
  7. }LNode,*LinkList;
  8. //头插法
  9. LinkList Link_HeadInsert(LinkList L)
  10. {
  11. if (L == NULL) //判断内存申请是否成功
  12. {
  13. return L;
  14. }
  15. L->next = NULL; //头结点的下一个节点赋值为空,防止其成为野指针
  16. int x;
  17. scanf("%d",&x); //输入数据
  18. while (x != 9999) //结束判断条件
  19. {
  20. LNode* p = (LNode*)malloc(sizeof(LNode)); //申请一个新节点,用p指针指向它
  21. p->data = x; //新节点赋值
  22. p->next = L->next; //新节点连接在头结点之后
  23. L->next = p;
  24. scanf("%d",&x);
  25. }
  26. return L;
  27. }
  28. //尾插法
  29. LinkList Link_TailInsert(LinkList L)
  30. {
  31. if (L == NULL) //判断内存申请是否成功
  32. {
  33. return L;
  34. }
  35. LNode* s,*r; //两个指针指向头结点
  36. s = r = L;
  37. int x;
  38. scanf("%d",&x); //输入数据
  39. while (x != 9999) //结束判断条件
  40. {
  41. r = (LNode*)malloc(sizeof(LNode));//申请一个新节点,用p指针指向它
  42. r->data = x; //新节点数据
  43. s->next = r; //新节点连接在前一个结点之后
  44. s = r; //s指向新的表尾节点
  45. scanf("%d",&x);
  46. }
  47. s->next = NULL;
  48. return L;
  49. }
  50. //输出
  51. void Link_Print(LinkList L)
  52. {
  53. LNode* P;
  54. P = L->next; //指针指向头结点之后
  55. while (P) //指针不为空则输出其data
  56. {
  57. printf("%d ",P->data);
  58. P = P->next;
  59. }
  60. printf("NULL\n");
  61. }
  62. int main()
  63. {
  64. LinkList L;
  65. L = (LNode*)malloc(sizeof(LNode)); //在内存中申请一个空间,初始化头结点
  66. Link_HeadInsert(L); //头插法
  67. printf("头插法输出:");
  68. Link_Print(L); //输出单链表
  69. L = (LNode*)malloc(sizeof(LNode)); //在内存中申请一个空间,初始化头结点
  70. Link_TailInsert(L); //尾插法
  71. printf("尾插法输出:");
  72. Link_Print(L); //输出单链表
  73. return 0;
  74. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/543656
推荐阅读
相关标签
  

闽ICP备14008679号