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

C++ linked list adding a new node to the beginning of the list

本文关键字:添加 列表 开头 节点 链表 新节点 C++      更新时间:2023-10-16

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

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链接到现有列表,并且我无法弄清楚我是否在做错误的步骤或是否遗漏了一步。

若要在列表的头部创建新节点,请执行以下步骤

  1. 创建一个保存您的值的临时节点
  2. 将临时节点的旁边设置为指向头部
  3. 将头部设置为临时

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

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

仔细考虑你拥有什么以及你需要做什么:

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

你做事的顺序很重要:如果你在nodePtr->next指向以前的值之前分配新的值head,你将失去整个列表!因此:

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

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

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

nodePtr = head;那么你只是覆盖了你刚刚做的指针。你想改变nodePtr->next = head; head = nodePtr;