链表相交,返回交点

1. 题目描述

     给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

2.思路

     首先得确定两条链表是否为空,如果为空或者任意一方为空,则不可能相交

     其次遍历链表 headA\textit{headA}headA,并将链表 headA\textit{headA}headA 中的每个节点加入哈希集合中。然后遍历链表 headB\textit{headB}headB,对于遍历到的每个节点,判断该节点是否在哈希集合中

     如果当前节点不在哈希集合中,则继续遍历下一个节点;

    如果当前节点再哈希表中,则返回当前节点,后续节点无需再看

3.

   //1.可用哈希表进行存储A的节点,再将吧B的节点放入进入,如果有重复,职责返回
     
      Set<ListNode> visited = new HashSet<ListNode>();

      ListNode tmp =headA;
     
   //2.先存入A节点
      while(tmp!=null){
          visited.add(tmp);
          tmp=tmp.next;
      }

  //3.再将b存入
     ListNode  tmpb = headB;
     while(tmpb!=null){

      if(visited.contains(tmpb)){
          return tmpb;
      }
      
       tmpb=tmpb.next;
     }
       return null;

时间复杂度Om+n)m,n分别为两条链表的长度

空间复杂度O(m)

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值