Linked List Head C ++

时间:2017-09-24 18:00:24

标签: c++ pointers linked-list

我正在为数据结构类创建一个简单的链表,并且无法理解头指针应该如何工作。

我有

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。

谢谢。

2 个答案:

答案 0 :(得分:2)

在大多数形式的链表中,头指针指向列表中的第一个节点或为null:

         +---+     +---+     +--+  
head --> | A | --> | B | --> |/0|  
         +---+     +---+     +--+  
                     ^  
                     |  
tail ----------------+  

许多初学者将列表与节点混淆。节点是包含数据的对象。列表是节点的集合。

推动头部
在前面插入需要执行以下步骤:

  1. 使新节点指向头节点。
  2. 将头节点更改为指向新节点。
  3. 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;