Leetcode-easy-链表-220911

这篇博客探讨了如何高效地解决链表问题,包括使用双指针找到两个链表的第一个公共节点,通过快慢指针实现空间复杂度为O(1)的链表反转和回文判断,以及利用哈希表快速移除链表中的重复节点。同时,强调了在链表操作中优化时间复杂度和空间复杂度的重要性。
摘要由CSDN通过智能技术生成

剑指 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步即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值