当前位置:   article > 正文

链表的新建(头插法与尾插法)_头插法创建链表

头插法创建链表

注意:在初始化单链表的时候,分辨与区分有无头结点的关键是,是否为头结点申请了一个空间,并且头指针指向这个头结点。

并且带头结点的单链表的 空表判断为 L->next==NULL

而不带头结点的单链表的 空表判断为 L==NULL

例如:

一、 头插法

即,逆序输入,正序输出。

头插法示意图

关键步骤:

s->next = L->next;

L->next = s;

  1. #include<stdio.h>//头插法建立链表。逆序输入,正序输出。
  2. #include<stdlib.h>
  3. typedef int ElemType;
  4. typedef struct LNode{
  5. ElemType data; //数据域
  6. struct LNode *next; //指针域
  7. }LNode,*LinkList;
  8. //LNode*是结构体指针,并且与LinkList完全等价
  9. void list_head_insert(LinkList &L)
  10. {
  11. L = (LinkList)malloc(sizeof(LNode)); //申请头结点空间,L为头结点,并且头指针指向头结点
  12. L->next = NULL; //为了让最后一个结点的指针域为空
  13. ElemType x; //要插入的数据元素
  14. scanf("%d",&x);
  15. LNode *s;
  16. while(x != 999) //输入的终止条件为999
  17. {
  18. s = (LinkList)malloc(sizeof(LNode)); //再为插入元素,申请一个结点空间。
  19. s->data = x; //将数据元素放入数据域
  20. s->next = L->next; //s的next指向原本链表的第一个结点
  21. L->next = s; //头结点的next,指向新结点
  22. scanf("%d",&x);
  23. }
  24. }
  25. void print_list(LinkList L)
  26. {
  27. L = L->next;
  28. while(L != NULL)
  29. {
  30. printf("%3d",L->data);
  31. L = L->next;
  32. }
  33. printf("\n");
  34. }
  35. //头插法新建链表
  36. int main()
  37. {
  38. LinkList L; //L是头指针
  39. list_head_insert(L); //输入数据可以为数据
  40. print_list(L);//链表打印
  41. return 0;
  42. }

二、尾插法

即,正序输入,正序输出。

关键步骤:

r->next = s;

r = s;

  1. #include<stdio.h>//尾插法建立链表。正序输入,正序输出。
  2. #include<stdlib.h>
  3. typedef int ElemType;
  4. typedef struct LNode{
  5. ElemType data; //数据域
  6. struct LNode *next; //指针域
  7. }LNode,*LinkList;
  8. void list_tail_insert(LinkList &L)
  9. {
  10. L = (LinkList)malloc(sizeof(LNode));
  11. L->next = NULL;
  12. ElemType x;
  13. scanf("%d",&x);
  14. LNode *s;//用来指向申请的新结点
  15. LNode *r=L;//r始终指向链表尾部
  16. while(x != 999)
  17. {
  18. s = (LinkList)malloc(sizeof(LNode));
  19. s->data = x;
  20. r->next = s; //r->next指向s结点
  21. r = s; //r要指向新的尾部
  22. scanf("%d",&x);
  23. }
  24. r->next = NULL; //让尾结点的next为NULL
  25. }
  26. void print_list(LinkList L)
  27. {
  28. L = L->next;
  29. while(L != NULL)
  30. {
  31. printf("%3d",L->data);
  32. L = L->next;
  33. }
  34. printf("\n");
  35. }
  36. //尾插法新建链表
  37. int main()
  38. {
  39. LinkList L; //L是头指针
  40. list_tail_insert(L); //输入数据可以为数据
  41. print_list(L);//链表打印
  42. return 0;
  43. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/784786
推荐阅读
相关标签
  

闽ICP备14008679号