尝试在我的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
。
首先,您应该使用->
而不是.
第二,你的代码有一个小错误。如果您到达最后一个节点,它是next
或NULL
,但该节点仍然有您忽略的数据。(因为你不去当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();
}