LeetCode 面试题 02.07. 链表相交

题目

在这里插入图片描述
在这里插入图片描述


思路

双指针一起遍历的思路
a指针指向 headA, b 指针指向 headB, 两个指针一起向后遍历, 如果 a 指针走到了 headA 的末尾,则把 a 指针设置为 headB, 继续从 B链表开始遍历, 同理, b 指针和A一样,这样子一起遍历直到 a 与 b 相等,或者是 a 为空 , b 也为空。

假设 链表A的长度为 lenA, B 的长度为 lenB, 链表A头节点到 交点的距离为 lena, 链表B头节点到交点的距离为 lenb

  1. 有交点的情况
    因为交点之后的公共长度是相等的,所以有如下关系式
    lenA - lena = lenB - lenb
    所以
    lenA + lenb = lenB + lena
    这说明,遍历一遍 A 链表 + 从B头节点到交点的距离 就是 指针总共走的距离

  2. 无交点的情况
    无交点,则 a 走完 A 链表之后,从 B 开始走,最终会走到 B的尾节点,最终会为空。 b 也 一样,两者会都为空, 两者走过的距离 相同, 都为 lenA + lenB


代码实现(Java)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode a = headA;
        ListNode b = headB;
        while(a!=b) {
            a = a!=null?a.next:headB;
            b = b!=null?b.next:headA;
        }
        return a;
    }
}

坚持分享,坚持原创,喜欢博主的靓仔靓女们可以看看博主的首页博客!
您的点赞与收藏是我分享博客的最大赞赏!
博主博客地址: https://blog.csdn.net/weixin_43967679

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiachengren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值