面试题37:两个链表的第一个公共结点
来源:互联网 发布:方舟数据修改 编辑:程序博客网 时间:2024/05/13 00:43
/* * 面试题37:两个链表的第一个公共结点 题目:输入两个链表,找出他们的第一个公共结点。 * * 从定义可以看出,这是单向链表。如果有公共结点,之后他们的所有结点都是重合的,不可能分叉,拓扑形状像一个Y而不是X。 * 思路1:可以把两个链表的结点放入两个栈,这样两个链表的尾结点就是栈顶,接下来比较栈顶结点是否相同。 * 直到找到最后一个相同的结点。空间复杂度和时间复杂度都是O(m+n). * 思路2:首先遍历两个链表得到它们的长度,得出哪个链表较长,长几个结点。第二次遍历的时候, * 较长的链表先走若干步,接着同时遍历两个链表,找到第一个相同的结点就是第一个公共结点。 * * 首先定义一个返回链表长度的方法 */public static int GetListLength(Node head){int nLength=0;Node pNode=head;while(pNode!=null){++nLength;pNode=pNode.next;}return nLength;}public static Node getFirstMeetNode(Node h1,Node h2){if(h1==null||h2==null)return null;int len1=GetListLength(h1);int len2=GetListLength(h2);int nLengthDif=len1-len2;Node pListHeadLong=h1;Node pListHeadShort=h2;if(nLengthDif<0){nLengthDif=len2-len1;pListHeadLong=h2;pListHeadShort=h1;}for(int i=0;i<nLengthDif;++i)pListHeadLong=pListHeadLong.next;while((pListHeadLong!=null)&&(pListHeadShort!=null)&&(pListHeadLong!=pListHeadShort)){pListHeadLong=pListHeadLong.next;pListHeadShort=pListHeadShort.next;}Node pFirstMeetNode=pListHeadLong;return pFirstMeetNode;}
0 0
- 面试题37:两个单链表的第一个公共结点
- 面试题37:两个链表的第一个公共结点
- 两个链表的第一个公共结点(面试题 37)
- 【剑指offer】面试题37:两个链表的第一个公共结点
- [剑指offer]面试题37:两个链表的第一个公共结点
- 剑指Offer:面试题37 两个链表的第一个公共结点
- 剑指offer 面试题37 两个链表的第一个公共结点
- 面试题37:两个链表的第一个公共结点
- 《剑指Offer》学习笔记--面试题37:两个链表的第一个公共结点
- 面试题37:两个链表的第一个公共结点
- 【剑指Offer学习】【面试题37:两个链表的第一个公共结点】
- 面试题37_两个链表的第一个公共结点
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 面试题37:两个链表的第一个公共结点
- 剑指offer之面试题37两个链表的第一个公共结点
- 剑指Offer----面试题37:两个链表的第一个公共结点
- 面试题37:两个链表的第一个公共结点
- 面试题37:两个链表的第一个公共结点
- 自定义View 滚动条
- Android多任务断点下载
- ci database报错
- ConcurrentHashMap类的理解
- 定时任务框架搭建
- 面试题37:两个链表的第一个公共结点
- 【Linux】 定时任务 每隔时间执行任务 脚本
- require.js的用法
- 使用Spring MVC构建Web应用程序
- Head First 设计模式(5):单件模式
- Android属性动画-Property Animation(三) 使用ValueAnimator完成动画
- Rest介绍
- SEO的未来发展前景
- JS中的history对象