c++ - 整数列表的交集 - 无法返回结果列表

标签 c++ linked-list

我已经为两个链表的交集编写了代码。我试过了 Leetcode 网站和我的代码运行没有任何错误。我在 main 中尝试使用自定义驱动程序函数,但没有收到所需的输出。

不确定我哪里出错了。谁能指出我遗漏了什么?

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

struct ListNode {

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

class Solution {
public:
    ListNode *getIntersection(ListNode *A, ListNode *B) {
        ListNode *p1 = A;
        ListNode *p2 = B;


        if(p1==NULL || p2==NULL)
            return NULL;

        while(p1!=NULL && p2!=NULL && p1!=p2) {
            p1=p1->next;
            p2=p2->next;

            if(p1==p2)
                return p1;

            if(p1==NULL) p1=B;
            if(p2==NULL) p2=A;    
        }

        return p1;
    }

    void print(ListNode *p) {
        while(p!=NULL) {
            cout<< p->val << " " ;
            p=p->next;  
        }

        cout<<endl;
    }
};

int main() {
    Solution s;
    ListNode *p1 = new ListNode(5);
    p1->next = new ListNode(11);

    s.print(p1);
    //similar for p2

    ListNode *p2 = new ListNode(6);
    p2->next = new ListNode(11);
    s.print(p2);

    s.getIntersection(p1,p2);
    return 0;
}

最佳答案

我认为主要问题是,在 while 循环中,您比较的是 pointer-to-ListNode 而不是 ListNode 中包含的值:

while(p1!=NULL && p2!=NULL && **p1!=p2**) {
                              ^^^^^^^^^^^
                               here
    p1=p1->next;
    p2=p2->next;

    **if(p1==p2)**
    ^^^^^^^^^^^^^^
     and here
        return p1;

你应该这样做:

while(p1!=NULL && p2!=NULL && p1->val!=p2->val) {
   ....

还有一个问题是,您正在计算的可能不是“交集”,但这是一个不同的问题。

关于c++ - 整数列表的交集 - 无法返回结果列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36523770/

相关文章:

c++ - macOS High Sierra 上的非默认编译器(GCC 或 Vanilla-Clang)链接问题

c++ - std::thread 构造函数如何检测右值引用?

c++ - 为什么 decltype 用于尾随返回类型?

c - 链接列表(在 C 中)为什么这不起作用

java - 返回带有 try/catch block 的方法

data-structures - 非对称链表需要什么

c - C编程删除链表中的某个节点

c++ - 指向独立函数和 friend 函数的指针之间的区别

c++ - 从文件中读取选定范围的行并存储到数组中

java - 链表的链表java