您的位置:首页 > 职场人生

微软面试100题系列---判断两个链表是否相交

2016-09-02 12:11 267 查看

题目

给出2个单向链表h1和h2,判断这两个链表是否相交;

假设2个链表都不带环。

实现

思路:如果两个链表相交,则他们一定有着相同的尾节点,所以分别求出2个链表的尾节点,判断尾节点是否相同;

代码实现:

boolean isIntersect(Node h1,Node h2){
if(h1==null || h2==null)
return false;
Node tail_1=h1;
while(tail_1!=null){
tail_1=tail_1.next;
}
Node tail_2=h2;
while(tail_2!=null){
tail_2=tail_2.next;
}
if(tail_1==tail_2)
return true;
else
return false;
}


题目扩展

如果2个链表相交,如何找到相交的第一个节点?

实现

思路:

分别计算出2个链表的长度,len1和len2,(len1>len2);

对链表1先遍历(len1-len2)个节点;此时2个链表距离相交点的距离相同;

同时对2个链表进行遍历,直到遇到第一个相同节点;此节点即为所求;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: