求两个链表的第一个节点
来源:互联网 发布:java如果输入错误跳出 编辑:程序博客网 时间:2024/06/07 07:12
参考编程之美的第三章 234页。
如果离链表有环的话,有环的节点肯定是共同的节点,通过标志位找环的节点或者通过链长度n以及循环的第n+1个节点肯定是第一个节点,然后用这个节点在第二个链中去遍历。
剑指offer上的193页,面试题37
方法2:标记已经访问的节点
首先对每个节点添加一个标志位bVisited,表示这个节点有没有被访问过,初始为false。
然后遍历链表A,把A中的每个节点标识为已访问过(设置bVisited=true);然后遍历链表B,在遍历的过程中,如果发现有一个已经访问过的节点,则证明此节点为A和B的交点。
这个算法的复杂度是O(m+n),比方法1好,但是这个方法需要为每个节点添加一个标志位。一种变通的方法是,利用Hash表记录一个节点是否已经被访问过。
方法3:利用A和B节点数目之差
观察本文开始给的图示,我们可以看到如果两个链表A和B相交,他们将呈现一个Y字形,我们利用A和B的节点数目之差就可以判断他们在什么地方相交了,步骤如下:
1)计算出链表A的节点数目,记做c1;
2)计算出链表B的节点数目,记做c2;
3)算出节点数目之差:d = abs(c1 - c2);
4)现在从节点数较多的链表开始,从头往前走过d个节点,从此节点往前走,两个链表有相同数目的节点。
5)此时我们可以同时遍历两个链表直到找到一个交点。
这个算法的复杂度是O(m+n),是推荐使用的方法
- 求两个链表的第一个节点
- 求两个链表的第一个节点
- 两个链表的第一个节点
- 求两个链表的第一个公共节点(来源于剑指名企offer)
- 第六十二题(求两个单向链表的第一个公共节点)
- 剑指off-求两个链表的第一个公共节点
- 剑指offer 37:求两个链表的第一个公共节点
- 【面试题】剑指Offer-37-求两个链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 两个单向链表的第一个公共节点
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 两个链表的第一个公共节点
- 今天好累的
- 关于出现僵尸信号SIGBAT或者EXC_BAD_ACCESS的解决方案
- [每日一题] 11gOCP 1z0-053 :2013-10-9 backup with the KEEP option....................................33
- hdu 4714 (树形dp)
- uiscrollview去除滑动效果
- 求两个链表的第一个节点
- Base64加密
- chromium aura简介
- mysql foreign key
- 打个招呼
- 第七周 计算圆柱体表面积的程序
- Windows消息机制要点
- Robotium学习笔记二
- 在Jersey中如何处理泛型集合