申请注册网站域名.商城,开发网站的空间分录,高端品牌服装,足球网站怎么做160.相交链表 题目链接算法 双指针相向而行 题目特征 寻找两个数组#xff08;或链表#xff09;中的匹配项 题目链接
https://leetcode.cn/problems/intersection-of-two-linked-lists/
算法 双指针相向而行 题目特征 寻找两个数组#xff08;或链表 双指针相向而行 题目特征 寻找两个数组或链表中的匹配项 题目链接
https://leetcode.cn/problems/intersection-of-two-linked-lists/
算法 双指针相向而行 题目特征 寻找两个数组或链表中的匹配项
我们需要找到两个链表的相交节点。
由于两个链表可能有不同的长度且相交点之后的节点是完全重合的我们需要对齐两个链表的长度以确保在遍历过程中能够比较相同位置的节点。
拼接链表并不是为了匹配上相交点而是为了对齐两个链表的长度以便在遍历过程中能够比较相同位置的节点。
通过拼接链表中间步骤的方法我们可以保证两个链表在遍历时具有相同的长度之所以使用这个方法是因为有这个特征。
这样在遍历过程中两个指针可以同时移动比较相同位置的节点是否相等以找到相交点。
拼接链表并不会改变原始链表的结构它只是为了对齐两个链表的长度。
举个例子
链表 A1 - 2 - 3 - 4链表 B5 - 6 - 7 - 3 - 4
在这个例子中链表 A 和链表 B 在节点 3 处相交之后的节点 3 和节点 4 是完全重合的。
拼接链表后
链表 A1 - 2 - 3 - 4 - 5 - 6 - 7 - 3 - 4链表 B5 - 6 - 7 - 3 - 4 - 1 - 2 - 3 - 4
通过拼接链表我们可以在后续的遍历中比较相同位置的节点。
当两个指针分别从链表 A 和链表 B 的头部开始遍历最终会在节点 3 处相遇找到了相交点。
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA nullptr || headB nullptr)return nullptr;ListNode *pA headA, *pB headB;while (pA ! pB) {pA pA nullptr ? headB : pA-next;pB pB nullptr ? headA : pB-next;}return pA;}
};