C++ 如何计算双链接列表中的元素数?
以下是列表的布局方式:C++ 如何计算双链接列表中的元素数?,c++,C++,以下是列表的布局方式: struct Node { Node *next; Node *prev; T datum; }; Node *first; // points to first Node in list, or 0 if list is empty Node *last; // points to last Node in list, or 0 if list is empty 我试过: int i =0; while(first->
struct Node {
Node *next;
Node *prev;
T datum;
};
Node *first; // points to first Node in list, or 0 if list is empty
Node *last; // points to last Node in list, or 0 if list is empty
我试过:
int i =0;
while(first->next)
{
i++;
}
但这似乎不正确。在更新指向当前节点的指针时,函数需要在列表上循环。大概是这样的:
function getLen(head) {
var curNode = head;
var len = 0;
while (curNode)
len++;
curNode = curNode.next;
}
return len;
}
试试这个
int i=0;
if(first!=0){
++i;
while(first!=last){
first=first->next;
++i;
}
}
std::cout<<i<<std::endl;
inti=0;
如果(第一个!=0){
++一,;
while(第一个!=最后一个){
第一个=第一个->下一个;
++一,;
}
}
std::cout您可以通过将指针从一个节点移动到另一个节点,直到指针为空来解决这个问题。计算指针非空的次数。所需的代码非常简单:
int list_size(const Node *ptr)
{
int size = 0;
while (ptr) {
size++;
ptr = ptr->next;
}
return size;
}
像这样使用它:
int size = list_size(first);
此代码不使用prev
指针,因此它也适用于单链接列表。您正在反复测试同一元素,以查看它是否链接到任何内容。你需要推进迭代器。这是做作业还是什么?这里有最后一个指针。。。现在还不清楚当你点击该按钮时,你是否应该停止,或者一直走到next(如果你先开始)或者prev(如果你最后开始)为空。你在那里得到了一个off。head
是指针类型,所以你需要curNode->next
,而不是curNode.next
。这个伪代码看起来更像Java,在Java中,算法是相同的,但所有内容都是引用,并且没有值类型(除了非对象类型,如int
)。不过,Java使用与C/C++值类型相同的语法。无论如何,这不是问题,因为它是伪代码。您正在更新常量value@pwilmot:否,它是指向常量节点的指针。指针是可变的,但它指向的不是。这确保函数不会修改列表中的任何节点。如果它被声明为Node*const ptr
,那么指针本身就是const
。