C++ 双链接列表附加值
我有一个问题:我的双链接列表中的第一个节点如何获得值?有人能解释一下吗?因为我在append_value函数中看到的是添加结束节点值,而不是第一个节点值。但是,当我尝试运行代码时,第一个节点不知何故有一些值。谢谢 请参阅代码: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;
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答案有用吗?