函数返回链表中的总数据

Function to return total data within a linkedlist C++

本文关键字:数据 返回 链表 函数      更新时间:2023-10-16

尝试在我的linkedlist类中实现一个函数,该函数将返回存储在列表中的数据总量。例如,包含5,10,20的linkedlist将返回35。

我的节点类包含getNextPtr和getData方法。

我实现了一个新的Node,并将其命名为currentPtr,并使其指向headPtr。

在编译我得到:"36请求成员getNextPtr在currentPtr是非类类型"

对于38和40也是一样的,38是currentPtr中的getData。

不太确定我错过了什么…

int LinkedList::getTotal()
{
    int total = 0;
    Node *currentPtr = headPtr;
(36)    while(currentPtr.getNextPtr() != NULL)
    {
(38)        total += currentPtr.getData();
(40)        currentPtr = currentPtr.getNextPtr();
    }
    return total;
}

这个想法是遍历链表,直到它到达指向null的tailptr,将它遇到的任何数据添加到total中。

希望这有意义,提前谢谢:)

如果你想解引用一个指针,你需要使用->,而不是.

。你的代码变成:

while(currentPtr != NULL)
{
   total += currentPtr->getData();
   currentPtr = currentPtr->getNextPtr();
}

我也发现写while(currentPtr)更自然(即。'虽然我有一个有效的指针'),而不是明确地测试NULL

首先,您应该使用->而不是.

第二,你的代码有一个小错误。如果您到达最后一个节点,它是nextNULL,但该节点仍然有您忽略的数据。(因为你不去当ptr->next == NULL。也就是说,您应该将条件更改为ptr != NULL)

我建议使用以下代码之一:

如果列表的开头有一个虚拟节点(虚拟节点是没有数据的节点,只是在列表的开头)

int LinkedList::getTotal()
{
    int total = 0;
    Node *currentPtr = headPtr->getNextPrt();
    while (currentPtr != NULL)  // or simply while (currentPtr)
    {
        total += currentPtr->getData();
        currentPtr = currentPtr->getNextPtr();
    }
    return total;
}

如果你没有虚拟节点,那就有点不同了:

int LinkedList::getTotal()
{
    int total = 0;
    Node *currentPtr = headPtr;
    while (currentPtr != NULL)  // or simply while (currentPtr)
    {
        total += currentPtr->getData();
        currentPtr = currentPtr->getNextPtr();
    }
    return total;
}

currentPtr是指针,而不是类类型(对象)。使用->来访问它的成员,而不是.

while (currentPrt->getNextPtr()) { ...

代码Node *currentPtr...声明了一个指向Node的指针。当通过指针访问对象的成员变量或函数时与这里的情况一样,您需要指针解除引用。

在您的示例中,这意味着将.成员访问器替换为->

所以你的代码应该是这样的:
while(currentPtr->getNextPtr() != NULL)
{
    total += currentPtr->getData();
    currentPtr = currentPtr->getNextPtr();
}