在 C++ 中无法将元素从一个单向链表添加到另一个

问题描述 投票:0回答:1

我遇到了这个问题:我需要将 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++ 比较陌生,但我希望获得有关如何解决该问题的提示。

c++ linked-list singly-linked-list
1个回答
0
投票

您的

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;
};

但也许这不是您所分配任务的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.