代码随想录 小结02 链表

发布时间 2023-12-31 22:38:17作者: 又见鸣蜩

第一题 移除链表元素
这题比较简单
使用dummyHead的方式会比较简单 不需要对头指针进行单独处理
但是空间开销会大一些

第二题 设计链表类
这个没什么好说的
感觉有可能一些细节会忘记
需要经常复习的一块

第三题 反转链表

这题难度不大 用一个tmp指针存储一下当前指针的next 然后直接反转就可以了
遍历和递归写法区别不大 递归不懂先看一下遍历代码就明白了

第四题 两两交换链表中的节点

这题需要画图才能比较清晰的写出代码 因为涉及到四个节点 需要两个tmp指针进行存储节点
画图之后难度应该不大

第五题 删除链表中的倒数第n个节点

这题主要利用两个指针一快一慢遍历整条链 当快指针到达链表尾部时 快指针正好在目标节点上 快慢指针本来是应该间隔n个节点
但是我们需要当前节点的父节点进行当前的节点的删除 所以我们需要慢指针停在当前节点的父节点 因此快慢指针应该间隔n+1个节点

第六题 链表相交

先计算两条链表的长度差 根据这个差让长链的指针前进相应的值 此时
这两个链表的指针距离相交位置是一样的
或者根本就不相交
然后让两个指针一起移动 走一步判断一次彼此是否相等
注意 这题不是问数值是否相等 而是指针是否相等

第七题 环形链表

这题需要有点记忆 知道利用快慢指针是否在链表相遇判断是否有环
然后快慢指针相差1的相对速度进入环 一定能够相遇(相对速度k的情况比较复杂,而且相遇时间可能变长)
最后根据数学式子推导 结论是当快指针从相遇节点出发和一个从头节点出发的指针相遇时 他们相遇的位置就是环的入口