大家。我的交叉方法有些麻烦。它工作正常,但在程序结束后它会抛出错误。这是我的代码:
void SortedLinkedList::intersection(SortedLinkedList finalList, SortedLinkedList list1, SortedLinkedList list2) {
Node *pointer1 = list1.first;
Node *pointer2 = list2.first;
int counter = 0;
while (pointer1 != NULL && pointer2 != NULL) {
if (pointer1->data < pointer2->data) {
pointer1 = pointer1->next;
}
else if (pointer2->data < pointer1->data){
pointer2 = pointer2->next;
}
else if (pointer1->data == pointer2->data){
finalList.addItem(pointer1->data);
pointer1 = pointer1->next;
pointer2 = pointer2->next;
}
}
finalList.printList();
}
我需要在第三个列表中获得两个列表的交集。
答案 0 :(得分:1)
主要的瞪眼错误:SortedLinkedList finalist
您必须更改该类中的值,它是您的输出数据结构。您必须通过引用传递它,否则传递给函数的实际列表永远不会被更改。
在某些情况下,您希望其他输入数据也传递给refs,就像使用“const”声明符一样,您必须只使用const
方法。因为你实际上不使用任何方法而你的类相对简单,这并不重要
void SortedLinkedList::intersection(SortedLinkedList& finalList,
const SortedLinkedList& list1,
const SortedLinkedList& list2)
没有看到你班级的整体设计的任何其他事情都会让人猜测。问题可能在于您的AddItem方法或缺少类字段初始化。
答案 1 :(得分:0)
它恰好用于合并到已排序的容器。
这是从链接获取的片段:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1{1,2,3,4,5,6,7,8};
std::vector<int> v2{ 5, 7, 9,10};
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<int> v_intersection;
std::set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(v_intersection));
for(int n : v_intersection)
std::cout << n << ' ';
}
在链接中,您还可以找到几种可能的实现方式。但是,我的建议是:&#34;不要重新发明轮子,只需重新调整它即可。