我正在为数据结构类创建一个简单的链表,并且无法理解头指针应该如何工作。
我有
TypeError: 'Series' objects are mutable, thus they cannot be hashed
但是,这并不会使头部成为列表中的第一个元素,而不是指向第一个元素的指针。
我尝试将push_front(E元素)更改为此但是会出现空指针错误。
template <typename E>
class SSLL{
template<typename E>
struct Node {
E data;
Node* next;
};
public:
template <typename E>
SSLL();
void push_front(E element);
private:
Node<E> * head;
Node<E> * tail;
};
template <typename E>
SSLL<E>::SSLL() {
head = NULL;
tail = NULL;
}
template <typename E>
void SSLL<E>::push_front(E element) {
Node<E> * n = new Node<E>;
n->data = element;
n->next = head;
head = n;
if (!tail) {
tail = n;
}
}
我在网上找到的所有例子都有head = n,但我仍然无法理解为什么它不是head-&gt; next = n。
谢谢。
答案 0 :(得分:2)
在大多数形式的链表中,头指针指向列表中的第一个节点或为null:
+---+ +---+ +--+
head --> | A | --> | B | --> |/0|
+---+ +---+ +--+
^
|
tail ----------------+
许多初学者将列表与节点混淆。节点是包含数据的对象。列表是节点的集合。
推动头部
在前面插入需要执行以下步骤:
1)使新节点指向头节点:
+---+
p_new -->| C |
+---+
|
V
+---+ +---+ +--+
head --> | A | --> | B | --> |/0|
+---+ +---+ +--+
2)使头指向新节点:
+---+
p_new -->| C |
head -->| |
+---+
|
V
+---+ +---+ +--+
| A | --> | B | --> |/0|
+---+ +---+ +--+
在C ++中,这看起来像:
Node * p_node = new Node;
p_node->next = head; // Step 1.
head = p_node; // Step 2.
答案 1 :(得分:0)
我们可以通过简单的代码用c ++制作新的Head:
ListNode* dummy = new ListNode(0);
dummy->next = head;