剑指 Offer 52. 两个链表的第一个公共节点
若用遍历的方法时间复杂度n方。
两个链表,想到双指针,分别统计长度,计算差值,然后根据差值令两个指针对齐,一起向后移动找到第一个相同点即可。
剑指 Offer II 024. 反转链表
剑指 Offer II 027. 回文链表
①输入到栈中,然后依次弹出并与链表中的节点依次比较。
②化为数组:前后双指针
以上均是空间时间为On,为了使空间复杂度低到O1,采用快慢指针,找到中间点。整个流程可以分为以下五个步骤:
找到前半部分链表的尾节点。
反转后半部分链表。
判断是否回文。
恢复链表。
返回结果。
面试题 02.01. 移除重复节点
unordered_set<int> occurred = {head->val};
occurred.count(cur->val))
occurred.insert(cur->val);
定义哈希表并查重或插入。
面试题 02.02. 返回倒数第 k 个节点
注意第一个指针比第二个快k个而不是k-1个,因为是在快指针指到null的时候才返回慢指针的位置,所以要求的倒数第k个元素就按照快比慢快k步即可。