2010-10-13 81 views
0

有人可以告诉检查链表大小的代码是什么(节点数)。这就是我的代码(插入和删除所有节点的头+信息)C++函数链表大小

struct node 
{ 
    int info; 
    node *nextptr; 
}; 

class list 
{ 
private: 
    node *L,*tail; 
    int count; 

public: 
    list() 
    { 
     L=tail=NULL; 
     count=0; 
    } 

    void InsertHead(int info); 
    int RemoveHead(); 
    void Print(); 
}; 
+2

为'count'创建一个getter? – NullUserException 2010-10-13 23:46:32

+0

你必须给我们更多的信息 - 函数的实现是什么?此外,你有什么尝试,你有什么具体的麻烦? – Eclipse 2010-10-13 23:47:23

回答

4

那么最简单的将贝托添加的功能InsertHead添加++计数,并在RemoveHead做--count

否则,你可以使用一个循环来通过清单

eg

node* p = L; 
while (p != NULL) 
{ 
    ++count; 
    p = p->nextptr; 
} 
+0

谢谢Mr.Anders K.I使用插入头中的++ count和Removehead中的--count的方法。我做了一个输出count(size)的函数大小。 – Salar 2010-10-14 00:01:28

1

您需要创建通过您的列表中的计数器,然后循环增加计数器

伪代码:

count = 0 
iterator = head 
while(iterator != 0) 
    count++ 
    iterator = iterator.next 
+0

你应该比较'NULL',而不是'0' – 2013-03-05 04:16:45

0

试试这个:

int size() { return count; } 
0

喜欢的东西:

int Count() 
{ 
    return count; 
} 
6

管理链表大小有两种方法,都有缺点。最简单的方法是管理一个计数变量,你的类有这样一个变量,并且每次向列表中添加节点时都会增加它,并且每次删除节点时都会减少它。

在这种情况下,您可以在固定时间内获取链表的大小。不足之处在于,一个有用的操作splice(你在哪里获取一个列表并将它切成两个较小的列表中的某个位置)变成线性复杂性,因为现在必须计算子列表中有多少个节点。

如果您希望splice为常量,那么您无法跟踪列表的大小。因此,无论何时您想要获得列表的大小,您都必须计算出有多少个节点。

+0

+1来阐述上行和下行。 – JMP 2010-10-13 23:53:06