在 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 的构造函数,因为它无法将valint 转换为const Node,并且默认构造函数不接受争论。你为什么放弃那里?你不明白错误信息吗? 【参考方案1】:

如果要调用new Node(val),其中valint,您的Node 需要一个以int 作为参数的构造函数。

也许:

struct Node

    int value;
    Node *next;
    Node *tail; 

    Node(int v) : value(v), next(nullptr), tail(nullptr)  
;

【讨论】:

以上是关于在 C++ 中实现双向链表时面临调试问题的主要内容,如果未能解决你的问题,请参考以下文章

Unity中实现双向链表

C++里创建链表时Node是啥意思?Node需要在函数头定义么?要的话怎么定义?

如何在双向链表 C++ 上使用插入排序?

Prolog中的双向链表

双向链表的实现

双向链表无限循环? [关闭]