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

题目

给出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个链表进行遍历,直到遇到第一个相同节点;此节点即为所求;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值