数据结构与算法之链表

本文详细介绍了链表的三种类型:单链表、双向链表和循环链表,及其各自特点。讨论了链表的删除操作,包括两种常见方法。还探讨了基于内存池的链表,以解决传统链表插入操作的缺点。此外,文章涵盖了链表的反转、倒序打印、判断链表是否有环以及环的长度等问题。最后,讲解了间接寻址、模拟指针的概念以及它们在内存池和并查集中的应用。
摘要由CSDN通过智能技术生成

    链表的分类:

(1)单链表

头插法:只需要维护一个头结点即可,常用来模拟堆栈;

尾插法:需要维护头结点和尾结点,常用来模拟队列。

(2)双向链表

双向遍历,可以用来保存网页的历史记录等;

(3)循环链表

经常出现在面试题中,判断链表是否有环。


链表的删除

方式一:维护两个指针,current(表示当前节点)和previous(表示当前节点的前一个节点)。当current遍历到要删除的元素时,执行previous->next = current->next,并删除current。在删除时,需要判断current是否等于head节点。

方式二:维护一个二级指针,Node ** current和一个临时变量entry。删除时只需要执行*current = entry -> next. 并删除entry即可,无需判断是否为head节点。


基于内存池的链表

传统链表的缺点:链表在插入过程中会调用系统函数分配内存,然后将该块内存链接到链表中。插入操作有三个缺点:

(1)进行频繁的系统调用,会浪费不少时间;

(2)在链表节点分配释放的过程中会产生很多内存碎片,不利于分配整块内存;

(3)可能会导致频繁的cache缺失;

解决方案:

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值