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

新手上路,请多包涵

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函数未正常在案例相交点返回。而是返回空指针。请大神帮忙解惑。

阅读 1.7k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题