Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何计算双链接列表中的元素数?_C++ - Fatal编程技术网

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