当前位置:   article > 正文

链表插入详解_链表的插入

链表的插入

单链表速成——增与删

众所周知,链表是数据结构的重中之重,但有许多朋友对此并不感冒,甚至想骂#¥……#……#。本文主要介绍小编对于链表的喜与悲,乐于忧。

 

先上图,添加结点

  • 单链表结点类型声明

  1. typedef int ElemType;//假设ElemType为自定义int型
  2. //单链表存储结构
  3. typedef struct LinkNode
  4. {
  5. ElemType data;//存储数据元素的数据域
  6. struct LinkNode* next;//指向后继结点的指针域
  7. }LinkNode;//SingleLink 的类型
  8. //创建头结点并置空
  9. void InitList(LinkNode *(&L))
  10. {
  11. L = (LinkNode*)malloc(sizeof(LinkNode));//创建头结点L
  12. L->next = NULL;//将其next域置空,初始化链表
  13. }
  • 头插法

  1. //头插法
  2. void ListInsertF(LinkNode* (&L), int n, ElemType a[])
  3. {
  4. LinkNode* s;
  5. L = (LinkNode*)malloc(sizeof(LinkNode));//创建头结点;
  6. L->next = NULL;//头结点置空
  7. for (int i = 0; i < n; i++)//循换建立数据结点
  8. {
  9. s = (LinkNode*)malloc(sizeof(LinkNode));//循环创建新的结点s
  10. s->data=a[i];//创建数据结点s
  11. s->next = L->next;//将L的后继结点赋值给s的后继结点
  12. L->next = s;//将结点s赋值给L的后继结点
  13. }
  14. }
  • 尾插法

  1. //尾插法
  2. void ListNodeR(LinkNode* (&L), ElemType a[], int n)
  3. {
  4. LinkNode* s;
  5. LinkNode* r;
  6. L = (LinkNode*)malloc(sizeof(LinkNode));
  7. r = L;//将L赋值给r;()
  8. for (int i = 0; i < n; i++)
  9. {
  10. s = (LinkNode*)malloc(sizeof(LinkNode));
  11. s->data=a[i];//创建数据结点s
  12. r->next = s;//将s赋值给r的后继指针
  13. r = s;//将结点s赋值给r
  14. }
  15. }
  • 指定位置插入

  1. bool ListInsert(LinkNode* (&L), int i, ElemType e)
  2. {
  3. int j = 0;
  4. LinkNode* p = L;//p指向头结点
  5. LinkNode* s;//定义结点
  6. if (i <= 0)
  7. return false;
  8. while (j < i - 1 && p != NULL)//寻找第i-1个结点p
  9. {
  10. j++;
  11. p = p->next;
  12. }
  13. if (p == NULL)// 未找到第i-1个位置
  14. return false;
  15. else
  16. {
  17. s = (LinkNode* )malloc(sizeof(LinkNode));//动态申请一个新的内存空间给新结点s
  18. s->data = e;//将e赋值给data
  19. s->next = p->next;//将p的后继结点赋值给s的后继结点
  20. p->next = s;//将结点s赋值给p的后继结点
  21. return true;
  22. }
  23. }

 

 

 

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

闽ICP备14008679号