2016-03-30 114 views
0

我正在創建一個程序,需要以CSV格式從電子表格中讀取數據,並將其分配給C++中的雙向鏈表。我創建了一個單鏈表,但我在如何使用這個想法來創建一個雙向鏈表。我知道你需要一個先前的指針,但我不確定是否實際執行代碼。我單鏈表在C++中創建雙向鏈表

代碼: 添加到列表:

if (!m_head) 
{ 
    m_head = new Node(name, reference,latitude,longitude); 
} 
else 
{ 
    Node *current = m_head; 
    while (current->getNext() != 0) 
    { 
     current = current->getNext(); 
    } 
    current->setNext(new Node(name, reference,latitude,longitude)); 
} 

請注意:Node是一個單獨的類來存儲節點例如數據名稱。

+6

[std :: list](http://en.cppreference.com/w/cpp/container/list)是一個雙鏈表。 – Maikel

+0

類對象需要一個更多的引用,以前一個節點。類的功能是最需要修改的,例如添加需要使用引用來保存新的先前節點,以便新節點的先前節點引用可以分配給它。邏輯非常簡單。 –

+0

你需要自己實現一些東西嗎? – alessalessio

回答

2

每個列表節點必須有一個指向上一個和下一個列表節點的指針。 列表然後是列表節點的容器,鏈接在一起。

struct ListNode; 

typedef struct ListNode { 
    struct ListNode *next; 
    struct ListNode *prev; 
    void *value; 
} ListNode; 

typedef struct List { 
    int count; 
    ListNode *first; 
    ListNode *last; 
} List; 

然後,您需要實現相應的方法push和pop。 棘手的部分是刪除方法。存儲您要刪除一個和下一個節點的兩個指針,然後相應地將它們分配到之前和之後的節點:

ListNode *after = node->next; 
ListNode *before = node->prev; 
after->prev = before; 
before->next = after; 

這篇文章可以幫助你,完整的代碼和解釋

http://c.learncodethehardway.org/book/ex32.html

+0

你不應該給只有鏈接的答案。引用這個答案中最相關的部分。 – Dennis

+0

完成。添加了最相關的部分 – alessalessio