我遇到了这个问题:我需要将 2 个单链表中的唯一整数元素添加到第三个列表(这意味着我必须添加在它们自己的列表中满足一次的元素,而不是两者)。
然而,我要么得到 EXC_BAD_ACCESS 错误,没有输出,要么只有一个元素在第三个列表中。
这是我在单链表中的节点结构和将元素添加到列表的函数。
struct Node {
int data;
Node* next;
};
void addNode(Node** head_ref, int new_data) {
Node* new_node = new Node();
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
我用来将一个列表中的元素添加到唯一元素列表中的函数:
void uniqueElements(Node* list1, Node* uniqueList) {
int count = 1;
for (Node *temp1=list1; temp1!=NULL; temp1=temp1->next){
for(Node *temp2=list1; temp2!=NULL; temp2=temp2->next){
if(temp1->data == temp2->data){
count++;
}
}
if(count == 1){
addNode(&uniqueList, temp1->data);
}
count = 1;
}
}
我使用 for 循环和 addNode 函数填充列表,然后我使用 uniqueElements 函数 2 次来填充唯一元素列表,如下所示:
Node* listUnique = new Node;
uniqueElements(list1, listUnique);
uniqueElements(list2, listUnique);
我尝试了很多不同的方法,包括使用集合和映射,但是它们似乎没有解决我遇到的问题或将元素添加到第三个列表。我不知道出了什么问题,我的教授拒绝帮助我,我唯一的线索是我引用了一个空列表或第三个列表的空元素。
我需要知道如何修复第三个列表的代码和输出元素。这可能是一个菜鸟问题,因为我对编码和 C++ 比较陌生,但我希望获得有关如何解决该问题的提示。
您的
uniqueElements
函数签名错误
应该是
void uniqueElements(Node* list1, Node** uniqueList) {
...
if(count == 1){
addNode(uniqueList, temp1->data);
}
...
}
就像你需要一个双指针用于
addNode
一样你也需要一个双指针用于uniqueElements
因为它向uniqueList
添加节点。
那么你的调用代码应该是这样的
Node* listUnique = nullptr; // empty list
uniqueElements(list1, &listUnique);
uniqueElements(list2, &listUnique);
接下来你应该考虑做的是编写一个真正的列表类。
Node*
不是一个列表,它是一个指针。你真的需要这样的课程
class List
{
public:
// list methods, e.g. addNode
private:
Node* head_node;
};
但也许这不是您所分配任务的一部分。