2016-09-16 34 views
0

我有一個雙向鏈表,這些int 5-> 6-> 8-> 10,並且我正在用int 1-> 7-> 3創建另一個雙向鏈表。在另一個鏈表中插入一個鏈表

我想要做的是將第一個列表中的int 5與第二個列表中的int 1鏈接起來。在其他我想要一個列表內的第一個節點指向另一個列表中的第一個節點。

這裏是一切 的粗略圖enter image description here

我在想儲存該列表的其他列表中的數據,但不確定該怎麼做,如果可能的話。

+0

嘿,這不是一個雙鏈表嗎?鏈接雙鏈表嗎? –

+0

實際上看起來像一棵樹。 –

+0

請澄清你的問題,你的圖與你的描述不一致。你的1-> 7-> 3列表在哪裏? –

回答

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}} 
}; 
+2

代碼中的圖表的輝煌複製! –

+0

不錯,雖然我敢打賭,這個任務是關於手動重做STL的。 – iksemyonov

0

什麼這實際上是叫的是你想要做什麼二叉樹或節點系統是進行結構一個數據持有者(你的int值)然後有三個指針,一個指向父親,另一個指向兩個孩子,它不是一個真正的鏈表,但它用於數據結構。 所以在你的例子中5是根,它有一個空指針,它的父親和一個指針在1值,另一個在6值,並且六和一個父親指針在5,然後1有兩個空指針對於孩子和6有一個指針在7和另一個在8等依此類推。

+0

您絕對可以將其數據存儲爲二叉樹,但通常相同的數據可以存儲在許多不同的數據結構中。您真的必須更多地瞭解數據及其使用情況,才能做出明智的數據結構選擇。 – David

0

我在考慮將列表作爲數據存儲在另一個列表中,但如果可能的話,不確定如何做到這一點。

可能與模板。如果你允許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 
}; 

這是最低限度。它需要插入,刪除和迭代器或其他遍歷方法來處理列表。它還需要複製構造函數和賦值運算符(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也將工作的中介。

相關問題