链表相关

单向链表需要考虑的问题:

1.空链表:头尾指针为空;
2.单结点链表:头尾指针指向相同;
3.多节点链表:操作结点位置在头结点和在非头节点的位置(一般需要两个指针,tail指针便于直接定位到链表末端,结点变换后需重置head、tail指针)

head应该保持指向链表头,遍历需用到临时指针变量。

增:

1.空链表:构造函数创建新节点,next指向nullptr;

2.前增: 构造函数用法 head = add_to_head(value , head);
创建新节点,令新节点的next指向原头,head指向新节点。

3.尾添: 创建新节点,tail->next = 该节点, 节点next = nullptr;

删:
(删除指定值的节点)
1.指定值存在:遍历查值,将前一节点指针指向下个节点,删除指向指定值节点。
在单向链表中若使用前一个节点的指针必须用两个指针遍历。

2.指定值不存在:

双向链表(可直接访问上个结点无需重新遍历)
循环链表
tail->next = new IntSLLNode(el, *tail->next *); //创建一个指向头结点的指针
tail = tail -> next; // 重置尾指针

跳跃链表skip list
(可非顺序查找,但链表中的值必须排序,有点类似二分搜索,跳跃链表本质上进行了空间换时间,均摊时间复杂度)
跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表。

在这里插入图片描述
举个例子:我们将搜索37,这个时候会从最高级指针开始查找,即LEVEL2,发现37在30和53之间,再从37和53指针的下一级(LEVEL1)开始查找…再从30和45指针的下一级找到37。

如何实现跳跃链表:不会!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值