在另一个链接列表中插入链接列表

时间:2016-09-16 16:26:26

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

我有一个带有这些int 5-> 6-> 8-> 10的双重链接列表,我正在使用int 1-> 7-> 3创建另一个双向链表。

我想要做的是将第一个列表中的int 5与第二个列表中的int 1相关联。在另一个中,我希望一个列表中的第一个节点指向另一个列表中的第一个节点。

这是一切的粗略图表 enter image description here

我正考虑将列表作为数据存储在另一个列表中,但如果可能的话,不确定如何执行此操作。

3 个答案:

答案 0 :(得分:1)

嗯,我真的不明白你的措辞,但基于图片:

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 :(得分:0)

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

答案 2 :(得分:0)

  

我在考虑将列表作为数据存储在另一个列表中,但如果可能的话,不确定如何执行此操作。

可以使用模板。如果您允许1,7,3列表为5,1,7,3

,则很容易

我只是坚持数据结构并忽略链表逻辑,因为OP已经写了。

public class Server extends javax.swing.JFrame {

    /**
     * Creates new form Server
     */
    public Server() {
        initComponents();
    }

    static public void writeToConsole(String s) {
        jTextArea1.append(s);
    }

    public static void main(String args[]) {

        try {
            ServerSocket servSocket = new ServerSocket(8008);
            writeToConsole("Server Started\n");
            int clientID = 1;
            while (true) {
                Socket clientSocket = servSocket.accept();
                //Pass this class to the ClientThread As object??
                ClientThread clientThread = new ClientThread(clientSocket, clientID++, (theObjectOfThisClass))
                );
                    clientThread.start();
            }

            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new Server().setVisible(true);
                }
            });
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

这是最低限度的。它需要insert,remove和迭代器或其他遍历方法才能使用列表。 To be Rule of Three compliant,它还需要一个复制构造函数和赋值运算符(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 }; )。我建议不要向用户公开operator=。有了它,它们可能会造成各种不圣洁的地狱,所以隐藏在迭代器后面的Node

5,1,7,3变体列表的声明看起来像

Node

LinkedList<LinkedList<int>> list; 指向list。此Node包含指向Node的{​​{1}}以及下一个和上一个节点的另一个LinkedList

要保留5,6,8,10和1,7,3,您需要一个存储号码和链接列表的中介

Node

int也可以。