判断链表有环

数据结构

算法

Published on

快慢指针哈希表添加标记就不说了,最近看到一个文章 提到了一种方法,把已经访问过的节点的next指针域的最低一个bit置1,我感觉非常有意思。

首先我们知道,4 字节对齐的地址最低两位是 00 ,例如地址 0x1004,它的二进制表示是:

0001 0000 0000 0100

4 字节对齐意味着地址必须是 4 的倍数。在二进制中,4 是 100,所以 4 * n 的最低两位始终是 00

尽管直接修改指针的最低有效位会导致非对齐地址问题,并且指向一个错误的地址,不直接解引用修改后的指针,而是将最低有效位作为一个标记位。在需要访问 next 指针时,先将最低有效位清零,恢复原始地址,然后再解引用。