相交链表的交点

问题描述

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点(这里的交点更像是汇集点,从此结点开始两链表合为一链表)。如果两个链表不存在相交节点,返回 null 。 原题链接

思路与方法

第一眼看到这题很快应该能想到用哈希,即用哈希表存储其中一个链表的所有节点,然后再顺序遍历另一链表,若在哈希表中能够查找到遍历的节点则说明该节点便是交点,反之没有交点。但此题进阶是需要O(1)的空间复杂度,刚开始想的时候若用两指针分别遍历两链表,若两表长度相等则可同时遍历并判断,若是不同则短的会先遍历完。可使短链表指针走完后再走长链表的,长链表走完后再走短链表的,则可使两指针走的总长度相等,即意味着若两链表有交点则两指针会同时到达交汇点。

Code

 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
         ListNode n1=headA,n2=headB;
         while(n1!=null||n2!=null){
             if(n1==n2)return n1;//到达交汇点
             if(n1!=null)n1=n1.next; 
             else n1=headB;//A表走完后再走B表
             if(n2!=null)n2=n2.next;
             else n2=headA;//B表走完后再走A表
         }
         return null;//没有交汇点
    }

复杂度分析

遍历了两链表,若两链表长度分别为m和n,则时间复杂度为O(m+n),内存上仅用了两指针节点,为常数量,所以空间复杂度为O(1)

拓展

该思路也可以扩展至3链表、4链表,若n条链表交汇于一节点,也可用n个指针遍历,每当一指针遍历完一表则按序遍历下一表,直到所有指针都指向同一节点(交汇点)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值