2010-10-13 5 views
0

Quelqu'un peut-il dire quel est le code pour vérifier la taille d'une liste chaînée (nombre de nœuds) .Ceci est ce que mon code est (insertion de suppression tête + info impression de tous les nœuds)taille de la liste chaînée dans la fonction 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

Créer un getter pour 'count'? – NullUserException

+0

Vous devrez nous donner plus d'informations - quelle est la mise en œuvre des fonctions? Aussi, qu'avez-vous essayé et avec quels problèmes particuliers avez-vous des problèmes? – Eclipse

Répondre

4

serait bien le plus simple Beto ajouter dans la fonction InsertHead ajouter ++ compter et dans le RetirerTête ne --count

Sinon, vous pouvez utiliser une boucle pour aller à travers la liste

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

Merci M.Anders K.J'ai utilisé la méthode d'ajouter ++ compte dans inserthead et --count dans Removehead.I a fait une taille de fonction qui produit count (taille). – Salar

1

Vous devez créer un compteur et ensuite en boucle dans votre liste augmentant le compteur

pseudocode:

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

vous devriez comparer contre 'NULL', pas' 0' –

0

Essayez ceci:

int size() { return count; } 
0

Quelque chose comme:

int Count() 
{ 
    return count; 
} 
6

Il y a deux façons de gérer la taille d'une liste chaînée, les deux ont des inconvénients. Le plus simple est de gérer une variable de comptage, votre classe a une telle variable, et vous l'incrémentez chaque fois que vous ajoutez un nœud à la liste, et vous le décrémentez chaque fois que vous enlevez un nœud.

Dans ce cas, vous pouvez obtenir la taille de la liste liée en temps constant. L'inconvénient est qu'une opération utile, l'épissage, où vous prenez une liste et la coupez en deux listes plus petites quelque part au milieu, devient une complexité linéaire, parce que maintenant vous devez compter combien de nœuds sont dans les sous-listes.

Si vous souhaitez que l'épissure soit constante, vous ne pouvez pas suivre la taille des listes. Donc, chaque fois que vous voulez obtenir la taille de la liste, vous devez compter combien de nœuds sont là.

+0

+1 pour élaborer à la hausse et à la baisse. – JMP

Questions connexes