首页 > 解决方案 > C++构造函数和析构函数设置双向链表

问题描述

问题是使用构造函数设置一个节点,并使用析构函数确保 prev 和 next 正确连接。

  class ListNode {
    public:
        int data;
        ListNode *prev, *next;
        ListNode(int Data, ListNode* Prev, ListNode *Next);
        ~ListNode();
    };

这是我的代码

class ListNode {
public:
        int data;
        ListNode *prev, *next;
        ListNode(int Data, ListNode *Prev, ListNode *Next) {
            data = Data;
            prev = Prev;
            next = Next;
        }
        ~ListNode() {
            prev -> next = next;
            next -> prev = prev;
        }
};

我遇到了运行时错误。如何解决这个问题。谢谢

标签: c++classconstructordestructordoubly-linked-list

解决方案


当前节点的析构函数不得接触其他节点的数据成员。并且类中没有要明确删除的内容。因此,析构函数应隐式或显式默认,例如

~ListNode() = default;

它是整个列表的析构函数(或例如类的单独静态函数ListNode)会费心正确地删除列表中的所有节点。

例如,您可以声明一个列表,如

class List
{
private:
    ListNode
    {
        //...
    } *head = nullptr, *tail = nullptr;
    size_t size = 0;

public:
    ~List()
    {
        // delete all nodes in the list
    }
    //...
};

至于构造函数,那么它可以定义为

    explicit ListNode( int data, ListNode *prev = nullptr, ListNode *next = nullptr)
        : data( data ), prev( prev ), next( next ) 
    {
    }

推荐阅读