在 C++ 中实现双向链表时面临调试问题
Posted
技术标签:
【中文标题】在 C++ 中实现双向链表时面临调试问题【英文标题】:Facing debugging problem when implementing doubly linked list in C++ 【发布时间】:2021-12-11 00:30:03 【问题描述】:我正在实现一个双向链表,其中每个节点都有两个指针。一个指向列表中的下一个节点,而另一个指向前一个节点。 节点结构由一个整数和一个指向列表中下一个节点的节点指针组成。另一个指向列表中前一个指针的指针。 该类包含两个节点指针:一个指向列表的头部,一个指向列表的尾部。如果列表为空,则它们都应指向 nullptr。
我的代码是
#include <iostream>
using namespace std;
struct Node
int value;
Node *next;
Node *tail; //previous node pointer
;
class LinkedList
private:
Node *head;
Node *tail;
public:
int size;
LinkedList()
head = nullptr;
tail = nullptr;
size = 0;
int length()
return size;
void append(int val)
if (head == nullptr)
head = new Node(val);
return;
// Iterate to end of list
Node *current;
current = head;
while (current->next != nullptr)
current = current->next;
// Link new node to end of list
current->next = new Node(val);
;
int main()
;
我收到此错误:
错误:没有用于初始化“节点”的匹配构造函数 头 = 新节点(val); ^ ~~~ linked_list.cpp:4:8:注意:候选构造函数(隐式复制构造函数)不可行:第一次没有从“int”到“const Node”的已知转换 争论 结构节点 ^ linked_list.cpp:4:8:注意:候选构造函数(隐式默认构造函数)不可行:需要 0 个参数,但提供了 1 个 产生 2 个错误。欢迎任何关于我可以在哪里阅读有关此主题的更多信息的建议/链接:) 提前谢谢您!
【问题讨论】:
出于好奇,为什么您要实现自己的双链表?作业?教育目的?跟随教程?特殊行为?我很好奇,因为 C++ 有开箱即用的std::list
,它经过了很好的审查和调试。
这是学校作业:)另外,我是 C++ 新手。
您在“head = new Node(val);”中使用“val”但是,作为输入,您尚未为此定义构造函数。您应该获取此输入并将其保存在结构中的整数变量中。
错误说它找不到适合Node
的构造函数,因为它无法将val
从int
转换为const Node
,并且默认构造函数不接受争论。你为什么放弃那里?你不明白错误信息吗?
【参考方案1】:
如果要调用new Node(val)
,其中val
是int
,您的Node
需要一个以int
作为参数的构造函数。
也许:
struct Node
int value;
Node *next;
Node *tail;
Node(int v) : value(v), next(nullptr), tail(nullptr)
;
【讨论】:
以上是关于在 C++ 中实现双向链表时面临调试问题的主要内容,如果未能解决你的问题,请参考以下文章