redis 源码分析:链表实现

一、链表定义 链表在 redis 中的使用十分广泛,例如列表的底层实现之一就是链表,包括发布、订阅等等功能都是有用到链表的。 redis 中链表在 adlist.h 和 adlist.c 中实现,只用了 300+行代码,十分简单。 redis 中的链表是一个双向不循环的链表,两个核心的数据结构是 listNode 和 lis ... 阅读更多

数据结构之链表 (二):双向循环链表

本篇文章是基于前篇 《数据结构之链表 (一):单向链表》 实现的,和单向链表重复的细节不再描述。 一、双向链表 双向链表和单向链表类似,唯一的区别是链表节点中除了有指向下一个节点的指针以外,还有一个指向上一个节点的指针。 节点的定义:

链表 ... 阅读更多

[leetcode]138-复制带随机指针的链表

来源:力扣 (LeetCode) 链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 一、题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该 ... 阅读更多

《剑指 offer 》面试题 22:链表中的倒数第 k 个节点

一、题目 输入一个链表,输出该链表中倒数第 k 个节点,为了符合大多数人的习惯,k 的序号从 1 开始,即链表的尾结点是倒数第一个节点。 例如,如下链表中的倒数第 3 个节点是 3: 二、解题思路 使用快慢指针,快指针先走 n 步,然后快慢指针同时走,直到快指针为 null,慢指针就是倒数第 n 个节点。 以上面的链表为例, ... 阅读更多

2-两数相加

来源:力扣 (LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 一、题目描述 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方 ... 阅读更多

数据结构之链表 (一):单向链表

一、单向链表 1.1 单向链表 链表是一种线性结构,通过一个链把所有的节点都链起来,因此叫做链表。它和数组最大的不同是:数组的内存是连续的,而链表不是。数组支持随机读写,但是插入和删除麻烦,链表不支持随机读写,但是插入和删除很方便。在更多场景下,链表用途更广。 一个链表的图形示例如下,每个链表节点都 ... 阅读更多