单链表尾部插入算法

墨蓝 2022-05-27 00:57 286阅读 0赞
  1. #include<stdio.h>
  2. #include<strings.h>
  3. #include<stdlib.h>
  4. //目的 从链表尾部插入新节点
  5. struct node
  6. {
  7. int data; //有效数据
  8. struct node *pNext; //指向下一个节点的指针
  9. };
  10. void insert_tail(struct node *pHeader,struct node *new)
  11. {
  12. struct node *p = pHeader;
  13. while(NULL != p->pNext) // 目的是找到最后一个节点,最后一个节点的p指向NULL
  14. {
  15. p = p->pNext;
  16. }
  17. p->pNext = new;
  18. }
  19. //作用:创建一个链表节点
  20. //返回值:指针指向我们函数新创建的一个节点的首地址
  21. struct node *create_node(int data) //接收参数data
  22. {
  23. struct node *p = (struct node *)malloc(sizeof(struct node)); //p只是一个局部变量
  24. if(NULL == p)
  25. {
  26. printf("malloc error \n");
  27. return NULL; // 不是返回-1
  28. }
  29. //清理申请的堆内存
  30. bzero(p,sizeof(struct node));
  31. //填充节点
  32. p->data = data;
  33. p->pNext = NULL; //将来要指向下一个地址的首地址
  34. //实际操作时将下一个节点malloc返回的指针赋值给这个节点
  35. return p; //返回指针p
  36. }
  37. int main(void)
  38. {
  39. //struct node *pHeader = NULL;
  40. struct node *pHeader = create_node(200);
  41. insert_tail(pHeader,create_node(300));
  42. insert_tail(pHeader,create_node(400));
  43. insert_tail(pHeader,create_node(4));
  44. //访问链表中第一个有效数据
  45. printf("node1 data:%d\n",pHeader->data);
  46. //访问链表中第二个有效数据
  47. printf("node2 data:%d\n",pHeader->pNext->data);
  48. //访问链表中第三个有效数据
  49. printf("node3 data:%d\n",pHeader->pNext->pNext->data);
  50. return 0;
  51. }

发表评论

表情:
评论列表 (有 0 条评论,286人围观)

还没有评论,来说两句吧...

相关阅读

    相关 插入排序算法

    如果数据存储在一段连续的内存上,比如数组中,插入排序算法的实现相信大家都已经非常熟悉,如果要对一个单链表进行插入排序,将会牵扯到大量指针操作。 同时,如果在实现的过