我已经为两个链表的交集编写了代码。我试过了 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/