日野弥生:勉強しよう

LeetCode 160 - 相交链表

发表于2025年01月15日

#链表 #双指针 #哈希表

由于要求不能改变链表的结构,通过观察得知,尾部如果相交,则双指针的起点必须保证步数一致,这是解题的关键。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* Ap=headA, *Bp=headB;
        int A_len=0,B_len=0;
        while(Ap->next)
        {
            Ap=Ap->next;
            A_len++;
        }
        while(Bp->next)
        {
            Bp=Bp->next;
            B_len++;
        }
        /* 求出双方长度后,让双指针的起点调整,保证遍历时步数一致 */

        Ap=headA,Bp=headB;
        if(A_len>B_len)
        {
            while(A_len-B_len>0)
            {
                Ap=Ap->next;
                A_len--;
            }
        }
        else if(A_len < B_len)
        {
            while( A_len-B_len < 0)
            {
                Bp=Bp->next;
                B_len--;
            }
        }
        /* 步数一致时,如果相等了那就一定相交*/
        while(Ap!=Bp)
        {
            Ap=Ap->next;
            Bp=Bp->next;
        }
        return Ap;
    }
};

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/

上一篇

LeetCode 142 - 环形链表 II

下一篇

LeetCode 206 - 反转链表