这就是列表的布局方式:
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++;
}
但这似乎不对。
答案 0 :(得分:1)
您的函数需要在更新指向当前节点的指针时循环遍历列表。像这样:
function getLen(head) {
var curNode = head;
var len = 0;
while (curNode)
len++;
curNode = curNode.next;
}
return len;
}
答案 1 :(得分:1)
您可以通过从节点到节点遍历指针直到指针为NULL来解决此问题。计算指针非NULL的次数。所需的代码非常简单:
int list_size(const Node *ptr)
{
int size = 0;
while (ptr) {
size++;
ptr = ptr->next;
}
return size;
}
像这样使用它:
int size = list_size(first);
此代码不使用prev
指针,因此它也适用于单链表。
答案 2 :(得分:0)
试试这个。
int i=0;
if(first!=0){
++i;
while(first!=last){
first=first->next;
++i;
}
}
std::cout<<i<<std::endl;