C++ Linked List find() 工作起来很奇怪

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

我有两个结构 Invoice & InvoiceDetails 定义如下:

struct InvoiceDetails {
    int invoiceId;
    int productId;
    int price;
    int quantity;
};

struct Invoice {
    int id;
    int createdAt;
};

数据结构的链表:

template<typename T>
struct Node {
    T data;
    Node *next;
};

template <typename T>
struct List {
    Node<T> *head = NULL;
    Node<T> *tail = NULL;
};

我需要一个方法,如通过 invoiceId 的“查找所有 InvoiceDetails”,并得到以下内容:

template <typename T>
void add(List<T> &list, Node<T> *p) {
    if (list.head == NULL) {
        list.head = p;
        list.tail = list.head;
    } else {
        list.tail->next = p;
        list.tail = p;
    }
}

List<InvoiceDetails> findByInvoiceId(const List<InvoiceDetails> &list, int invoiceId) {
    List<InvoiceDetails> result;    
    Node<InvoiceDetails> *current = list.head;
    while (current != NULL) {
        if (current->data.invoiceId == invoiceId) {
            add(result, current);
        }
        current = current->next;
    }

    return result; 
}

我遇到了下图中描述的运行时问题(txt文件中的所有数据与数据模型完全相同):

enter image description here

您可以看到 Invoice2 上的项目也会出现在 Invoice1 上的问题,这是不正确的!

我认为内存分配出了点问题,但无法弄清楚,因为我对 CPP 还很陌生。所以请帮助。任何指示将不胜感激!提前致谢!

c++ linked-list dynamic-memory-allocation singly-linked-list function-definition
1个回答
1
投票

新加入链表的指针current指向的节点的数据成员next没有设置为nullptr

首先,如果指针 current 指向的节点被添加到新列表并将其数据成员设置为 nullptr 旁边,则您需要创建一个动态副本。

否则,您需要从源列表中删除添加到新列表的节点,同时将其数据成员设置为 nullptr。

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