【问题标题】:Insert a linked list inside another linked list [closed]在另一个链表中插入一个链表[关闭]
【发布时间】:2017-01-24 23:02:31
【问题描述】:

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

我想要做的是将第一个列表中的 int 5 与第二个列表中的 int 1 链接起来。另一方面,我希望一个列表中的第一个节点指向另一个列表中的第一个节点。

这是所有内容的粗略图

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

【问题讨论】:

  • 嘿,这不是双向链表吗?它是链式双链表?
  • 实际上看起来像一棵树。
  • 请澄清您的问题,您的图表与您的描述不一致。你的 1->7->3 列表在哪里?

标签: c++ list doubly-linked-list


【解决方案1】:

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

可以使用模板。如果您允许 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
};

这是最低要求。它需要插入、删除和迭代器或其他遍历方式来处理列表。 To be Rule of Three compliant,它还需要一个复制构造函数和一个赋值运算符(operator=)。我建议不要将Node 暴露给用户。有了它,他们可以制造各种邪恶的地狱,所以将 Nodes 隐藏在迭代器后面。

5,1,7,3 变体列表的声明类似于

LinkedList<LinkedList<int>> list;

list 指向Node。这个Node 包含另一个LinkedList,它指向ints 的Nodes 以及下一个和上一个节点。

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

struct Intermediary
{
    int data;
    LinkedList<int> sublist;
};

LinkedList<Intermediary> list;

std::pair 也可以。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您绝对可以将他的数据存储为二叉树,但通常相同的数据可以存储在许多不同的数据结构中。您确实必须更多地了解数据及其用途,才能做出明智的数据结构选择。
    【解决方案3】:

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

    struct Data {
        int value;
        std::list<int> list;
    };
    
    std::list<Data> data = {
        {5, {1}},
        {6, {7, 8, 5}},
        {8, {4, 3}},
        {10, {8, 4}}
    };
    

    【讨论】:

    • 在代码中出色地复制图表!
    • 很好,不过我敢打赌,这项任务是关于手动重做 STL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多