虾饺爱下棋 2023-08-01 10:08 采纳率: 100%
浏览 10
已结题

力扣-相交链表中的困惑

https://leetcode.cn/problems/intersection-of-two-linked-lists/description/
likou写题的时候发现有个地方我不明白,
为什么这样写while循环里面的不对呀,给我报错,时间超时,我不太清楚
我理解的A指针检测下一个指向空形成循环链表,但是答案是检测当前指针指向空再形成循环链表,我想这不是一样吗?
以及这种情况咋结出来的,两个不相交的情况下,不会陷入死循环吗?
求解

while(A!=B) {
        if(A->next==NULL) {
            A->next=headB;
        } 
        if(B->next==NULL) {
            B->next=headA;
        }
        A=A->next;
        B=B->next;
    }

下面是对的代码


struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    //特殊情况优先考虑
    if(headA==NULL || headB==NULL) {
        return NULL;
    }

    struct ListNode* A=headA;
    struct ListNode* B=headB;
    while(A!=B) {
        if(A==NULL) {
            A=headB;
        } else{
            A=A->next;
        }
        if(B==NULL) {
            B=headA;
        } else {
            B=B->next;
        }
    }
    return A;
}
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2023-08-01 16:55
    关注

    上面第一种写法,实际地把 headA headB 链表形成了循环链表,即: A->next=headB; B->next=headA; 这两句,也就是实际地把两个链表尾指针都指向了另一个链表的头,改变了链表最尾指针next 的指向。
    第二种写法,是用指针变量 A B 分别指向两个链表,当指针指向一个链表尾部时,再让指针重新指向另一个链表头,没有改变链表。两个不相交的情况,当循环到出现 A = NULL B = NULL , while (A != B) 条件就不满足了,就退出while()循环了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月10日
  • 已采纳回答 8月2日
  • 修改了问题 8月1日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?