C+中的嵌套链表+; 我试图在C++中构建嵌套链表(C++非常新)。 列表中的节点可以是整数值,也可以是另一个包含所有整数值的链接列表
我已经阅读了其他关于SO的文章,我知道我应该为节点数据类型使用多个数据类型的联合。 这就是我到目前为止所拥有的C+中的嵌套链表+; 我试图在C++中构建嵌套链表(C++非常新)。 列表中的节点可以是整数值,也可以是另一个包含所有整数值的链接列表,c++,C++,我已经阅读了其他关于SO的文章,我知道我应该为节点数据类型使用多个数据类型的联合。 这就是我到目前为止所拥有的 class linkedList { private: struct node { union data { int val; linkedList* list; }; data currData; node* next;
class linkedList {
private:
struct node {
union data {
int val;
linkedList* list;
};
data currData;
node* next; // a pointer which will point to the next node
}*p;
我的问题是如何开始在节点结构中分配列表指针。
例如,对于val,我知道我可以执行
p->currData->val=5
。我不会使用联合。我只需要为每个字段保留一个值和某种类型的类型
字段,以便您知道它是什么
class LinkedList {
public:
class Node {
LinkedList * list = nulptr;
int value = 0;
Node * next = nullptr;
};
};
在本例中,若列表为nullptr,则它不是指向新列表的节点。或者您可以显式地添加一个类型
,但对于这么简单的东西,我可能不会
p->value = 5;
不要使用联合体,而是查看
std::variant
。它的好处是“知道”它包含什么类型的数据。例如:struct node{std::variant currData;node*next;}*p代码>同时,考虑使用标准或类替换手动链表,如:<代码>类链接目录{Prime:STD::list p;…};<代码>请记住,当您玩完节点后,需要有人将它们全部放回原位,否则会出现内存泄漏。这本身就是使用std::list
的一个很好的理由。如果没有,您需要确定是使用int
还是指针,这样您就可以把所有链接的节点都放在一边,而这正是std::variant
真正有用的地方。如果您仍然选择单独执行,请确保<>代码> Link KEdList观察至少一个注意事项:考虑直接存储<代码> LIKEDLIST/<代码>,而不是指针。一个正确编写的单链接列表不应该比一个指针大太多,最坏的情况可能是两个指针(头和尾)和列表中的链接数,我不使用std::list或std::variant的原因纯粹是为了学习指针和内存分配/释放@用户4581301您能否澄清直接存储linkedlist而不是指针是什么意思?如何初始化列表指针?我是说,这个怎么编译?因为当Node类编译时,它还不知道LinkedList类。我说的对吗?这是一个内在的阶级。它绝对知道什么是LinkedList*。你试过密码了吗?