我有一个包含这些int5->6->8->10的双向链表,我正在创建另一个带有int1->7->3的双向链表。
我想做的是将第一个列表中的int5与第二个列表中的int1链接起来。在其他情况下,我希望一个列表中的第一个节点指向另一个列表中的第一个节点。
这是所有东西的粗略图

我正在考虑将列表作为数据存储在另一个列表中,但如果可能的话,我不确定如何做到这一点。
发布于 2016-09-17 00:31:34
嗯,我不太明白你的措辞,但根据图片:
struct Data {
int value;
std::list<int> list;
};
std::list<Data> data = {
{5, {1}},
{6, {7, 8, 5}},
{8, {4, 3}},
{10, {8, 4}}
};发布于 2016-09-17 00:35:06
这实际上是一个二叉树或节点系统,你想做的是建立一个结构,有一个数据持有者(你的int值),然后有三个指针,一个用于父对象,两个用于子对象,它不是真正的链表,但在数据结构中使用。所以在你的例子中,5是根,它有一个空指针指向它的父指针,一个指针在1值,另一个指针在6值,6和1都有父指针在5,然后1有两个空指针指向孩子,6有一个指针在7,另一个指针在8,以此类推。
发布于 2016-09-17 04:47:42
我在考虑将列表作为数据存储在另一个列表中,但如果可能的话,我不确定如何做到这一点。
使用模板是可能的。如果允许1,7,3列表为5,1,7,3,则很简单
我将坚持使用数据结构,忽略链表逻辑,因为OP已经编写了链表逻辑。
template<class TYPE>
class LinkedList
{
private:
struct Node
{
TYPE data;
Node * next;
Node * prev;
};
Node * head;
public:
LinkedList():head(nullptr)
{
}
~LinkedList()
{
while (head != nullptr)
{
Node *temp = head;
head = head->next;
delete temp;
}
}
// methods go here
};这是最低要求。它需要使用insert、remove和迭代器或其他遍历方法来处理列表。To be Rule of Three compliant,它还需要一个复制构造函数和一个赋值运算符(operator=)。我建议不要向用户公开Node。有了它,他们可以折磨各种邪恶的地狱,所以把Node隐藏在迭代器后面。
5,1,7,3变量列表的声明如下所示
LinkedList<LinkedList<int>> list;list指向一个Node。此Node包含另一个LinkedList,它指向Node%s、int%s以及下一个和上一个节点。
为了保存5、6、8、10和1,7,3,您需要一个存储数字和链表的中介
struct Intermediary
{
int data;
LinkedList<int> sublist;
};
LinkedList<Intermediary> list;std::pair也可以工作。
https://stackoverflow.com/questions/39536185
复制相似问题