首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个链表中插入链表

在另一个链表中插入链表
EN

Stack Overflow用户
提问于 2016-09-17 00:26:26
回答 3查看 957关注 0票数 0

我有一个包含这些int5->6->8->10的双向链表,我正在创建另一个带有int1->7->3的双向链表。

我想做的是将第一个列表中的int5与第二个列表中的int1链接起来。在其他情况下,我希望一个列表中的第一个节点指向另一个列表中的第一个节点。

这是所有东西的粗略图

我正在考虑将列表作为数据存储在另一个列表中,但如果可能的话,我不确定如何做到这一点。

EN

回答 3

Stack Overflow用户

发布于 2016-09-17 00:31:34

嗯,我不太明白你的措辞,但根据图片:

代码语言:javascript
复制
struct Data {
    int value;
    std::list<int> list;
};

std::list<Data> data = {
    {5, {1}},
    {6, {7, 8, 5}},
    {8, {4, 3}},
    {10, {8, 4}}
};
票数 1
EN

Stack Overflow用户

发布于 2016-09-17 00:35:06

这实际上是一个二叉树或节点系统,你想做的是建立一个结构,有一个数据持有者(你的int值),然后有三个指针,一个用于父对象,两个用于子对象,它不是真正的链表,但在数据结构中使用。所以在你的例子中,5是根,它有一个空指针指向它的父指针,一个指针在1值,另一个指针在6值,6和1都有父指针在5,然后1有两个空指针指向孩子,6有一个指针在7,另一个指针在8,以此类推。

票数 0
EN

Stack Overflow用户

发布于 2016-09-17 04:47:42

我在考虑将列表作为数据存储在另一个列表中,但如果可能的话,我不确定如何做到这一点。

使用模板是可能的。如果允许1,7,3列表为5,1,7,3,则很简单

我将坚持使用数据结构,忽略链表逻辑,因为OP已经编写了链表逻辑。

代码语言:javascript
复制
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变量列表的声明如下所示

代码语言:javascript
复制
LinkedList<LinkedList<int>> list;

list指向一个Node。此Node包含另一个LinkedList,它指向Node%s、int%s以及下一个和上一个节点。

为了保存5、6、8、10和1,7,3,您需要一个存储数字和链表的中介

代码语言:javascript
复制
struct Intermediary
{
    int data;
    LinkedList<int> sublist;
};

LinkedList<Intermediary> list;

std::pair也可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39536185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档