【相交链表】

一、题目

在这里插入图片描述

二、思路

从这个实例中我们可以看出,A链中包含1,B链中也包含1,他们仅仅是值相同而不像一个节点。而从8开始他们就开始是一个节点。

在这里插入图片描述

解题思路:这道题目让求两个链表相交的节点, 利用双指针法O(m+n) 就可以遍历完成
这道题目的思想是让 a, b 指针都走一遍 headA, headB 两个链表, a, b 相遇的地方就是两个链表相交的地方.
a 指向 headA, 一步一步往 next 走, 走到结尾 null 时, 跳到headB 继续往后遍历;
b 指针跟 a 一样的, 只不过先遍历 headB, 到结尾了再跳到 headA
为什么 a, b 会在交点相遇;

假设headA, headB是有交点的, 他们整个移动的路径像一个 8 字. 我觉得这个有点像莫比乌斯环~, 两个指针的起始位置虽然不一样, 但是大家的走的步伐是一致的, 而且朝着相交的点在移动, 于是可以相遇. 画一个图来理解一下可能更加清晰.

在这里插入图片描述

三、代码

在这里插入图片描述

四、时间复杂度和空间复杂度

时间复杂度:首先,代码会检查两个链表是否为空。这是一个 O(1) 操作。
然后,它使用两个指针 pa 和 pb 分别从链表 headA 和 headB 开始遍历链表,直到找到交点或者同时到达链表末尾。在遍历过程中,它会不断地将 pa 和 pb 移动到下一个节点,直到它们相遇,或者同时到达链表末尾。在最坏情况下,这需要遍历整个链表,所以时间复杂度是 O(m + n)。
空间复杂度:代码只使用了两个指针 pa 和 pb 以及一些常量额外空间来存储其他变量,因此空间复杂度是 O(1),与输入链表的大小无关。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jiang_fish-balls

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

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

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

打赏作者

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

抵扣说明:

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

余额充值