力扣-链表相交-java

题目描述
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。
在这里插入图片描述
在这里插入图片描述
思路
这道题是判断两个链表有没有交点,如果有返回交点,如果没有返回null,题的交点是这个节点即在A链表上又在B链表上,说明这A和B是相交的,如果两个链表是相交的,这两个链表的结构是
在这里插入图片描述
因为链表A和链表B相交于D的话,说明节点D在链表A上也在链表B上,而D之后的元素自然也是均在A和B上了,因为他们是通过next指针相连的,如果两个链表是相交的话,每个链表的头指针会先走完自己的链表的长度,然后在走另一个链表,因为这个时候每个头结点走的距离是一样的,都是AD+BD+DC,走的速度一样,距离也是相同的,所以一定会走到相同的节点D上。如果不相交最后就会走到null节点上返回null。

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode a = headA;//链表A的指针
        ListNode b = headB;//链表B的指针
        while(a != b){//循环的条件是两个链表不相等
            //到达链表末尾时,重新走另一条链表的路
            a = a == null ? headB : a.next;//判断链表的节点是不是null,如果不是就继续向下走
            b = b == null ? headA : b.next;//判断链表的节点是不是null,如果不是就继续向下走
        }
        return a;//最后返回相加的节点,这里返回a或b均可
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值