我有两个结构 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文件中的所有数据与数据模型完全相同):
您可以看到 Invoice2 上的项目也会出现在 Invoice1 上的问题,这是不正确的!
我认为内存分配出了点问题,但无法弄清楚,因为我对 CPP 还很陌生。所以请帮助。任何指示将不胜感激!提前致谢!
新加入链表的指针current指向的节点的数据成员next没有设置为nullptr
首先,如果指针 current 指向的节点被添加到新列表并将其数据成员设置为 nullptr 旁边,则您需要创建一个动态副本。
否则,您需要从源列表中删除添加到新列表的节点,同时将其数据成员设置为 nullptr。