链表分为程序内部和内存内部
程序内部
________________________________
head |内存内部 1 add 2 add 5 add |
l->口-> | 口口-> 口口-> 口口 |
—————————————————————————————————
head存链表地址(也就是1的add)
链表中第一个元素可以索引到第二个, 第二个可以找到第三个, 以此类推.
这三个元素都可以通过程序内部的head指针找到, 所以他们没有发生内存泄露
结构定义:
节点结构定义:
节点有两个字段
1. 数据区
2. 地址区(存放链表下一个元素的地址)
链表结构定义:
1. 虚拟节点head
2. 链表长度
链表的插入:
要将3插入2和4中间 : 3的地址区放4的地址, 将2地址区中4的地址改为3的地址,
node中存着3的地址, 所以2地址区 = node.
node 3
口->口口
^ |
| v
head 2 | 4
l->口-> 口口 口口-> 口口-> 口口
插入结束, 释放node指针
链表的删除:
删除4 : 直接更改3的地址区, 改成5的地址, 释放掉4
____________
head 3 | 4 | 5
口-> 口口-> 口口 口口 ——>口口
单项循环链表
【注意】head存储的是单项循环链表尾节点的地址
如果要往头部(0位)插入, head走0步,往1位置插入, 走一步