2016-03-30 86 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