【问题标题】:create a doubly linked list in C++在 C++ 中创建一个双向链表
【发布时间】:2016-07-18 17:33:42
【问题描述】:

我正在创建一个程序,该程序需要从 CSV 格式的电子表格中读取数据并将其分配给 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 是一个单独的类,用于存储有关节点的数据,例如名字。

【问题讨论】:

  • std::list 是一个双链表。
  • 类对象需要一个更多的引用,指向前一个节点。类的功能是最需要修改的,例如add需要使用一个引用来保存新的前一个节点,以便新节点的前一个节点引用可以分配给它。逻辑很简单。
  • 你需要自己实现一些东西吗?

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


【解决方案1】:

每个列表节点必须有一个指向前一个和下一个列表节点的指针。 List 是 List Nodes 的容器,以链的形式链接在一起。

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。 棘手的部分是 remove 方法。存储要删除的前一个节点和后一个节点的两个指针,然后将它们相应地分配给前一个和后一个节点:

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

这篇文章可能对你有所帮助,完整的代码和解释

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

【讨论】:

  • 你不应该只给出链接的答案。引用此答案中最相关的部分。
  • 完成。添加了最相关的部分
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多