leetcode 160:相交链表

本文详细解析了链表相交问题的算法思想及其实现代码,通过双指针技巧,巧妙地解决了两个链表可能相交的问题,即使链表不相交也能正确处理。算法的关键在于利用链表自身的特点,让两个指针分别遍历两个链表,当遇到链表尾部时转向另一个链表,最终相遇点即为相交节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

 

算法思想:这道题有一个关键点就是如果A B链表相交,相交后面的部分是一样的,但是前面不相交的部分长度不同,如果A B链表同时跑,那么到达尾部时间不同,但是跑完之后A跑B链表,B跑A链表,那么本来不相交部分的长度变的相等了,都是A+B。需要注意的是即使链表完全不相交也不要紧,NULL可以看做相交点,就是判断条件不是A->next!=NULL,而是A!=NULL。

代码:

    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *A = headA;
        ListNode *B = headB;
        while(A != B)
        {
            if(A != NULL)
                A = A->next;
            else 
                A = headB;
            if(B != NULL)
                B = B->next;
            else
                B = headA;
        }
        return A;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值