C++ 双链接列表附加值

C++ 双链接列表附加值,c++,doubly-linked-list,C++,Doubly Linked List,我有一个问题:我的双链接列表中的第一个节点如何获得值?有人能解释一下吗?因为我在append_value函数中看到的是添加结束节点值,而不是第一个节点值。但是,当我尝试运行代码时,第一个节点不知何故有一些值。谢谢 请参阅代码: struct Node { int value; Node *next; Node *prev; }; class DoubleLinkList { private: Node *first; Node *end;

我有一个问题:我的双链接列表中的第一个节点如何获得值?有人能解释一下吗?因为我在append_value函数中看到的是添加结束节点值,而不是第一个节点值。但是,当我尝试运行代码时,第一个节点不知何故有一些值。谢谢

请参阅代码:

struct Node
 {
 int value;
 Node *next;
 Node *prev;
 };

class DoubleLinkList
{
    private:
        Node *first;
        Node *end;
    public:
        DoubleLinkList();
        void show_list();
        void append_value(int);
};

DoubleLinkList::DoubleLinkList()
{
 first = NULL;
 end = NULL;
} 

void DoubleLinkList::show_list()
{
 Node *node;
 node = first;
    while(node)
    {
    cout << node->value << " ";
    node = node->next;
    }
    cout << endl;
}

void DoubleLinkList::append_value(int value)
{
 Node *ptr = end;
 end = new Node;
if (first == NULL)
 first = end;
else
 ptr->next = end;
if(end)
 {
   end->next = NULL;
   end->prev = ptr;
   end->value = value;
 }
}
struct节点
{
int值;
节点*下一步;
节点*prev;
};
类双链接列表
{
私人:
节点*第一;
节点*结束;
公众:
DoubleLinkList();
void show_list();
无效附加值(int);
};
DoubleLinkList::DoubleLinkList()
{
第一个=空;
end=NULL;
} 
void DoubleLinkList::show_list()
{
节点*节点;
节点=第一;
while(节点)
{
其次是价值观;
}
cout next=结束;
若(完)
{
结束->下一步=空;
结束->上一次=ptr;
结束->值=值;
}
}

通常,在双链接列表中,当头部指针为nul时,表示列表为空:

void DoubleLinkList::append_value(int value)
{
//...
    if (first == nullptr)
    {
       // List is empty
    }
//...
}
此时,将头指针和结束指针设置为新节点,从而将节点放入列表中:

//...
    if (first == nullptr)
    {
        first = end;  
    }
//...

您可以通过在构建时填写
节点
值来简化它:

void DoubleLinkList::append_value(int value) {
    end = new Node{value, nullptr, end};

    // Check if there was a node there since before and, if so, make it point
    // at the new `end`.

    if(end->prev) {
        end->prev->next = end;
    } else {
        first = end; // this is the first node added, make it point at `end`
    }
}
注意:您还需要一个析构函数来
删除
对象并实现/
删除
复制构造函数、复制赋值操作符、移动构造函数和移动赋值操作符


我不明白。您编写了代码,但不知道它是如何工作的?函数
append\u value
将在列表末尾添加一个包含值的新节点。如果列表为空,则向列表末尾添加新节点也将有效地将该节点添加到列表的开头。欢迎使用堆栈溢出!您的代码不完整;特别是,它似乎缺少一个
main()
函数和至少一个
#include
。请输入您的代码,使其成为您问题的一部分(包括任何必要的输入,但最好不需要任何输入),然后我们可以尝试复制并解决它。你也应该阅读。@Popolocrois答案有用吗?