C ++链接列表将新节点添加到列表的开头

时间:2017-10-23 14:11:06

标签: c++ linked-list

我正在努力解决如何将我正在创建的新节点链接到链接列表的其余部分。

template <class T>
void LinkedList<T>::addBeg(T value)
{
      ListNode *nodePtr = head;
      head = nodePtr->next;
      head = nodePtr;
      nodePtr = new ListNode(value);
}

我知道我在这里做错了什么:新值根本没有关联链表。

我想我知道自己需要做什么。我非常确定我需要做的是创建新值,插入现有列表的开头,然后将head重新定义为新创建的值。

我遇到的问题是,我不知道该怎么做。

所以,我认为我需要做的事情(至少在逻辑上)是设置

*nodePtr = new Listnode(value);

然后设置

nodePtr = head; 

然后设置

head = nodePtr-> next; 

然后设置

new ListNode(value) = head;

我是否在正确的轨道上?我无法摆脱这种唠叨的感觉,即我没有正确地将新的ListNode链接到现有列表,我无法弄清楚我是在做错步骤还是我错过了一步。

5 个答案:

答案 0 :(得分:2)

要创建列表头部的新节点,请按照以下步骤操作

  1. 创建一个包含值的临时节点
  2. 将临时节点设置为指向头部
  3. 将头部设置为临时

答案 1 :(得分:1)

首先必须创建一个新节点,然后将其链接到当前头部。然后将引用从前一个头切换到新创建的节点。

ListNode *newHead = new ListNode;
newHead->next = head;
head = newHead;

答案 2 :(得分:0)

如果您说nodePtr = head;,那么您只是覆盖刚才制作的指针。您想要更改nodePtr->next = head; head = nodePtr;

答案 3 :(得分:0)

仔细考虑您拥有的和您需要做的事情:

  • 您有两个关注的节点:当前head和您的新nodePtr
  • 您希望nodePtr->next指向当前的头部,并将头部更新指向nodePtr,以便这是列表中的第一个节点。

您执行操作的顺序非常重要:如果在head指向上一个值之前指定新值nodePtr->next,您将丢失整个列表! 因此:

  1. 创建新节点nodePtr
  2. nodePtr->next指向前方。
  3. 指向nodePtr

答案 4 :(得分:0)

你走错了路。解决方案是创建新节点,将下一个节点链接到头部,然后将头部引用到新节点:

template <class T>
void LinkedList<T>::addBeg(T value)
{
    ListNode *nodePtr = new ListNode(value);
    nodePtr->next = head;
    head = nodePtr;
}