leetcode160 指针相等未正常退出循环

发布于 2022-09-12 02:23:11 字数 1588 浏览 20 评论 0

include<iostream>

struct ListNode
{

int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}

};

class Solution
{
public:

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
{
    if (!headA || !headB) return NULL;

    ListNode *curA = headA;
    ListNode *curB = headB;

    //如下测试案例,curA应该在指向相交点2时直接返回。但实际测试是到空指针才返回。
    while (curA != curB)
    {
        curA = curA ? curA->next : headB;
        curB = curB ? curB->next : headA;
    }
    return curA;
}

};

int main()
{

ListNode *headL = new ListNode(3);
ListNode *heada = new ListNode(2);
ListNode *headb = new ListNode(4);

headL->next = heada;
heada->next = headb;
ListNode *ptrA = headL;

ListNode *headR = new ListNode(0);
ListNode *head1 = new ListNode(9);
ListNode *head2 = new ListNode(1);
ListNode *head3 = new ListNode(2);
ListNode *head4 = new ListNode(4);
headR->next = head1;
head1->next = head2;
head2->next = head3;
head3->next = head4;
ListNode *ptrB = headR;

Solution s;
ListNode *result = s.getIntersectionNode(ptrA, ptrB);

if (!result)
{
    std::cout << "The intersection Node is: " << result->val << std::endl;
}

while (!headL)
{
    ListNode *cur = headL->next;
    delete headL;
    headL = cur;
}

while (!headR)
{
    ListNode *cur = headR->next;
    delete headR;
    headR = cur;
}
return 0;

}

解决方案在leetcode内能通过。自己在vs写测试案例测试时。发现解决方案的getIntersectionNode函数未正常在案例相交点返回。而是返回空指针。请大神帮忙解惑。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无语# 2022-09-19 02:23:11

这个问题空看出来leetcode的测试案例其实还是真挺靠谱的。会返回空没问题,按照题目意思你这两个链表就是无相交。
image.png
看一下这两个Node,你都是new的,这题的结束循环条件是两个Node对象相同,而不是Node的val相同,你这个是不同的对象,当然没法提前结束loop,那肯定是走到空才结束。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文