如何计算双向链表中的元素数量?

时间:2015-11-28 05:26:42

标签: 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++;  
}  

但这似乎不对。

3 个答案:

答案 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;