【发布时间】:2021-07-31 08:40:04
【问题描述】:
我正在尝试实现两个成员函数,即push_front 和destructor。我已经编写了push_front 函数的代码。但我似乎,我在任何地方都做错了。我该如何解决这个问题?如何在Linked-List前面正确插入节点?
template <typename T>
class Node {
public:
Node():next_p_{nullptr} {}
Node(T v, Node* n):data_{v}, next_p_{n} {}
~Node() {};
void setData( T &v ) { data_ = v; }
const T &getData() const { return data_; }
void setNext( Node *n ) { next_p_ = n; }
Node *getNext() const { return next_p_; }
private:
T data_;
Node *next_p_;
};
template <typename T>
class LinkedList {
private:
Node<T> *head_ptr_;
public:
LinkedList():head_ptr_{nullptr} {}
~LinkedList() {
}
// Insert at the front of the linked list (UPDATED)
void push_front( T v ){
Node *new_node = new Node;
new_node->setNext(*head_ptr_) = v;
new_node->next_p_ = this->head_ptr_;
this->head_ptr_ = new_node;
}
};
【问题讨论】:
-
你插入的不是数字,而是节点。由于
Node是一个模板类,它可以包含任何类型的数据。 -
你创建一个新的
Node,设置它的next指针指向旧的head_ptr,然后设置head_ptr指向新的Node。 -
单链表 push_front 涉及创建一个新节点,将其 next 指针设置为当前链表头指针,然后将链表头指针设置为刚刚分配的新节点。销毁链表只是对所有节点的枚举,随着您的进行销毁它们。有了这个,你最好阅读What is the Rule Of Three?。它与您的代码高度相关。
-
@Barmar,感谢您的评论。请详细发布它作为答案以便更好地理解。
-
如果不写代码为你做功课,我不知道如何更详细地解释。没有比我之前说的更多的了。
标签: c++ linked-list singly-linked-list