单链表
关于typedef与结构体
此时的LNode *等价于LinkList
上下两种效果相同
上面解释
相当于
*LinkList=LNode(LinkList取值是LNode)
也就是LinkList=struct LNode *p(LinkList是结构体的指针)
不同的对应用于上面位置最好
初始化一个单链表
不带头结点
带头结点
两者间区别
一般用带头结点的
小结
单链表的插入删除
按位序插入
带头结点版
LNode *p=L;
int j=0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
这行代码在链表操作很常用,用于查找对应的第i-1个节点
不带头结点版
i=1时与其他操作不同
由于没有头结点,只有一个指针
所以插入到第一个位置时候
新的结构体
s->data=e;
s->next=L;
L=s;
实现链表的连接
指定节点的后插操作
指定节点后插操作
逆天!
!!!把数据互换!!!
按位序删除
带头节点版
指点节点的删除
还是与后面的一个节点的数据交换,然后删除我们新建的节点(因为我们不能直接得到前面的节点然后指向后面的删除节点后面的节点)
所以我们把对应节点的数据删除即可,把后面的数据提到完想要删除的节点内,然后然删除节点指向后两个节点
最后free(删除节点的后一个节点)
这样就完成了指定节点的删除
但是!!!
这样写是有bug的,如果p节点是最后一个节点就会出现空指针异常
这样我们就只能从表头依次找对应p的前驱
小总结
单链表的查找(带头节点)
按位查找
按值查找
求表的长度
单链表的建立
带头节点版本
尾插法
插入的数据都是最后一个元素
输入9999结束
r永远指向表尾
头插法
插入的永远在第一个元素