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->next)
{  
    i++;  
}  

但这似乎不对。

最佳答案

您可以通过将指针从一个节点移动到另一个节点直到指针为 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 指针,因此它也适用于单链表。

关于c++ - 如何计算双向链表中元素的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33968022/

相关文章:

c++ - Firebird 在 `UTF8 string converted to wstring` 上崩溃

c++ - 读取不断更新的文件 (C++)

c++ - 将 vector 上的 std::find_if 转换为循环的最佳方法是什么?

c++ - `const int a = 1;` 是 `a` 常量表达式,如果 `a` 有自动存储持续时间

c++ - 如何为回收站添加上下文菜单

c++ - 如何使用 CMake 指定在何处查找共享库?

c++ - std::array 作为虚函数中的参数

c++ - 使用 ODBC 连接到 SQL SERVER 2008

c++ - 包含两个整数(并且只有两个整数)的结构是否保证是 sizeof(int) 的两倍大?

C++ 返回 std::pair<int *,int *>?