【力扣刷题练习】160. 相交链表

题目描述:

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

题目解答:

class Solution {
public:
    ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
        ListNode *A = headA, *B = headB;
        while (A != B) {
            A = A != nullptr ? A->next : headB;
            B = B != nullptr ? B->next : headA;
        }
        return A;
    }
};

题目思路:

参考站内大佬的思路,函数的工作原理如下:

初始化两个指针 A 和 B,分别指向两个链表的头节点。
在一个循环中,比较 A 和 B 的当前节点。如果它们不相同,就移动它们到下一个节点。这里有一个技巧:如果 A 已经遍历到了链表的末尾(即 A == nullptr),则将其设置为 B 的起始节点(即 headB),这样可以确保不会出现无限循环。同样,如果 B 已经遍历到了链表的末尾,就将其设置为 A 的起始节点。
当 A 和 B 指向同一个节点时,循环停止,这时返回这个节点。

你可能感兴趣的:(力扣刷题练习,链表,数据结构)