①*LinkList 和 ListNode 是不同名字的同一个指针类型(命名的不同是为了概念
上更明确)
②*LinkList 类型的指针变量 head 表示它是单链表的头指针
③ListNode 类型的指针变量 p 表示它是指向某一结点的指针
6、指针变量和结点变量
┌────┬────────────┬─────────────┐
│ │ 指针变量 │ 结点变量 │
├────┼────────────┼─────────────┤
│ 定义 │在变量说明部分显式定义 │在程序执行时,通过标准 │
│ │ │函数 malloc 生成 │
├────┼────────────┼─────────────┤
│ 取值 │ 非空时,存放某类型结点 │实际存放结点各域内容 │
│ │的地址 │ │
├────┼────────────┼─────────────┤
│操作方式│ 通过指针变量名访问 │ 通过指针生成、访问和释放 │
└────┴────────────┴─────────────┘
①生成结点变量的标准函数
p=( ListNode *)malloc(sizeof(ListNode));
//函数 malloc 分配一个类型为 ListNode 的结点变量的空间,并将其首地址放入指
针变量 p 中
②释放结点变量空间的标准函数
free(p);//释放 p 所指的结点变量空间
③结点分量的访问
利用结点变量的名字*p 访问结点分量
方法一:(*p).data 和(*p).next
方法二:p-﹥data 和 p-﹥next
④指针变量 p 和结点变量*p 的关系
指针变量 p 的值——结点地址
结点变量*p 的值——结点内容
(*p).data 的值——p 指针所指结点的 data 域的值
(*p).next 的值——*p 后继结点的地址
*((*p).next)——*p 后继结点
注意:
① 若指针变量 p 的值为空(NULL),则它不指向任何结点。此时,若通过*p
来访问结点就意味着访问一个不存在的变量,从而引起程序的错误。
② 有关指针类型的意义和说明方式的详细解释
可见,在链表中插入结点只需要修改指针。但同时,若要在第 i 个结点之前插
入元素,修改的是第 i-1 个结点的指针。