/* 结构体不能含有同类型的结构,但是可以含有指向同类型结构的指针。这样的定义是定义一个链表的基础。 */
1 typedef int Element;
2
3 typedef struct node{
4 Element e;
5 struct node* next;//这里只是声明了一个名为next的指针,指针本身也占内存空间,里面存放的始终是地址。 struct node* 表示指针的类型是 struct node,即指向的地址里存放的是一个结构体
6 }LNode, *Linklist;  //LNode等价于struct node; *LinkList 等价于 struct node* 
  • 等号 = 左右 的 p 和 p->next 意义不同,要注意甄别;
  • pre 单独出现的时候代表一个节点 ,如head,就代表head节点;
  • pre在 = 左边 出现时代表一个节点,在= 右边 出现时代表节点pre的地址;
    •   p = head; //节点p指向节点head的地址
  • p->next 在= 左边 出现时 节点p的指针域;在 = 右边 出现时代表节点 p 的下一个节点地址(即下一节点数据域的地址);
    •   p->next = pre->next; //p 的指针域指向原先 pre 节点的下一个节点地址
    •   pre->next = p; //pre的指针域指向节点 p 的地址
  • 单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址"
 1 /**
2 * 插入元素
3 */
4 Linklist insert(Linklist head, int k, Element e){
5 int getLength(Linklist head);
6
7 Linklist p = (Linklist)malloc(sizeof(LNode));//申请一个新节点
8 Linklist pre = (Linklist)malloc(sizeof(LNode));//申请一个新节点
9 int length = getLength(head);
10 pre = head;
11
12 if(k == length+1){ //在链表末尾添加新节点
13 while(pre->next) {
14 pre = pre->next; //单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址" 
15 }//循环结束时,pre已经到达链表末尾
16 p->e = e;
17 pre->next = p;
18 p->next = NULL;
19 }else if(k > 0 && k <= length){//在链表中间添加节点 ,插入位置从1开始算
20 int j = 1;
21 while(j < k) {
22 pre = pre->next;//单链表中申请的节点 p 不能使用"p++"操作。p++本身不会出现语法问题,但是并不会"从指向p变成指向p的下一个节点" , 而是"从指向p的数据域地址变成指向p的指针域地址" 
23 j++;
24 }//循环结束时,pre是要插入位置的前驱节点
25 p->e = e;
26 p->next = pre->next; // p 的指针域指向原先 pre 节点的下一个节点的地址 
27 pre->next = p; // pre的指针域指向节点 p 的地址
28 }else{
29 printf("插入的位置有误!\n");
30 }
31 return head;
32 }

最新文章

  1. Ext Js【Hello World】 ——4.1 beta 1
  2. 考前复习(codevs 2837)
  3. 【extjs】 Extjs中的Ext.grid.Panel隐藏列会显示在表头中解决方法
  4. Android 程序员必须掌握的三种自动化测试方法
  5. 自己定制Linux发行版(资料)
  6. UIView中触摸事件touchBegin
  7. mysql locktables
  8. js如果你想删除您问
  9. SpringMVC视图
  10. 二叉树 - 建立与遍历使用Java
  11. laravel5.4+vue+vux+element的环境搭配
  12. 浅谈RMQ
  13. valueOf函数详解
  14. yum安装软件报错Segmentation fault处理
  15. ES6躬行记(2)——扩展运算符和剩余参数
  16. Week 2 代码规范
  17. [iOS]App上架流程[利用Archive进行上传]
  18. mysql半同步开启
  19. 深度学习原理与框架-神经网络架构 1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差) 4.dropout(防止过拟合操作)
  20. [剑指Offer]35-复杂链表的复制

热门文章

  1. Java并行任务框架Fork/Join
  2. Python实现可视化操作
  3. Kali安装OWASP
  4. Less-32 宽字节
  5. 手把手教你学Dapr - 1. .Net开发者的大时代
  6. 写了10000条Airtest截图脚本总结出来的截图经验,赶紧收藏!
  7. 大闸蟹的 O O 战记
  8. spring cloud feign的基本使用
  9. 2021.8.13考试总结[NOIP模拟38]
  10. 最容易出错的C语言指针