2010-10-13 82 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