Counter=Counter->nextptr 在链表中到底是如何工作的?

问题描述 投票:0回答:1

我刚刚开始使用 DSA,但我对 C++ 中的 LinkedList 中的某些内容感到困惑。我的问题很长,但如果有人花时间回答我的愚蠢问题,我将非常感激,因为问题的摘要是,当 nextptr 在构造函数中指向 NULL 时,current->nextptr 如何获取节点。

代码如下:

#include <iostream>
using namespace std;


struct node
{
    int data;
    node *nextptr;

    node(int valueUinsert)
    {
        this->data = valueUinsert;
        nextptr = nullptr;
    }
};
void InsertAtEnd(node *&head, int valueUinsert)
{
    node *n = new node(valueUinsert);
    node *counter = head; 

    if (head == nullptr) 
    {
        head = n;
    }
    else
    {
        while (counter->nextptr != nullptr)
        {
            counter = counter->nextptr;
        }
        counter->nextptr = n;
    }
}

int main()
{
    node *head = nullptr;
    InsertAtEnd(head, 2);
    InsertAtEnd(head, 3);
}

上面是我的链接列表代码,但我仍在尝试理解它。让我向你解释一下我所理解的以及我的问题是什么,如果我有错误的地方请纠正我。

首先我们创建节点类,并在其构造函数中使用 int 值对其进行参数化,该值将作为我们想要放入节点中的数据传递给我们。在这个构造函数中,我们有一个名为 nextptr 的成员,它是一个指针,目前设置为 NULL,而 data 则设置为我们将很快添加到节点中的值。

然后我们在 main 函数中创建一个节点类型的头指针,它也指向 null。现在,为了在链接列表中添加元素,我们创建了函数 InsertatEnd,该函数接受我们在 main 中创建的真实节点类型头指针,以及我们想要添加到列表中的 int 值。

在函数中,我们创建另一个名为 n 的节点类型指针,并在堆中为节点类型对象动态分配内存,该对象接受我们要添加到列表中的值,并将该节点类型对象的地址存储在节点中类型名为 n 的指针。到目前为止我所说的一切都正确吗??

然后我们创建了另一个名为counter的节点类型指针,它指向我们的头指针所指向的samje内存位置,在本例中即为NULL。然后我们检查列表是否为空,将传递的值存储在 head 中,否则我们遍历计数器直到最后,这样我们就可以将传递的值放入,

现在这是我不理解这里的代码/逻辑的地方。我不明白这个 counter->next 是如何工作的

在 while 循环中,我们有这个条件 k 运行这段代码,直到计数器指向 NULL

我们在 main 中写道:

InsertAtEnd(头, 2); InsertAtEnd(头, 3);

现在当InsertAtEnd(head, 2);执行后,它会将值2赋给我们的节点对象,这样节点的数据就会存储值2,从而使n指向2,我说得对吗?

然后在下一行中,它将使我们的计数器指向与头相同的位置,然后当我们到达将运行的 if 语句时,因为我们的头现在指向 NULL,它将使我们的头指针指向与头相同的位置n,它是存储 2 作为数据的节点对象。

然后我们回到main函数并执行InsertAtEnd(head, 3);

现在它将再次将真正的头指针传递给函数,并将值 3 赋予我们的节点对象作为节点的数据问题:它是否应该覆盖之前的值 2?

现在直到这个阶段我们的计数器都指向 null,这是 head 的先前值,但是现在我们的计数器将指向我们的 head 所指向的 2。

现在它将跳过 If 语句并转到 else,这是我不明白的地方。

在 else 语句中我们有 while 循环,它将遍历计数器直到我们得到 NULL,现在 counter->nextptr 是什么意思? counter现在是指向2的指针,而nextptr是指向null的指针,那么这个counter->nextptr是如何工作的,它对我来说没有意义,它是如何遍历的?然后在 while 循环体中,我们有这个

counter = counter->nextptr;

这个 counter->nextptr 如何获取计数器的下一个值?它是如何工作的。请解释一下

我只是想了解当前->下一个是如何工作的?

c++ data-structures linked-list singly-linked-list dsa
1个回答
0
投票

简而言之,

head
指向列表中的第一个
node
,每个
node
nextptr
成员指向列表中的下一个
node
,其中最后一个
node
 nextptr
nullptr

main()
中,您的
head
最初是
nullptr
。对
InsertAtEnd()
的第一次调用看到
head
nullptr
并更新
head
以指向新的
node
,其
data
2
nextptr
nullptr
。然后,对
InsertAtEnd()
的第二次调用看到
head
不是
nullptr
,因此它会遍历列表,直到找到最后一个
node
,其
nextptr
nullptr
,并将该
nextptr
更新为指向新的
 node
,其
data
3
nextptr
nullptr
。等等。

© www.soinside.com 2019 - 2024. All rights reserved.