2010-01-20 7 views
1

Donc j'apprends Java et je veux implémenter une liste unidirectionnelle, mais quand j'essaie de l'imprimer, ça se passe dans une boucle infinie, en imprimant seulement le premier élément, comme si temp ne se réattribue pas. Quel est le problème ici?Java: implémenter une liste

public class Cons 
{ 
public int stuff; 
public Cons next; 

public Cons(int i) 
{ 
    this(i, null); 
} 

public void show() 
{ 
    Cons temp = this; 
    while(temp != null) 
    { 
    System.out.println(temp.stuff); 
    temp = temp.next; 
    } 
} 

public void push(int i) 
{ 
    stuff = i; 
    next = this; 
} 

    public static void main(String[] args) 
    { 
    Cons head = new Cons(2); 
    head.push(3); 
    head.push(12); 
    head.show(); 
    } 
} 
+2

Le code que vous avez montré ne compile pas à cause de 'this (i, null);' dans le constructeur. –

+0

Vous n'êtes pas en train d'ajouter des éléments/nœuds à votre "liste", vous écrasez simplement le précédent à chaque fois. – Kevin

Répondre

3

Dans ce bloc:

public void push(int i) 
{ 
    stuff = i; 
    next = this; 
} 

Vous assignez next de nœud à lui-même.

Essayez ceci:

public void push(int i) 
{ 
    next = new Cons(i); 
} 

Cela supprimera l'auto-boucle, mais vous aurez toujours le problème de se rappeler où la queue est. Je vais laisser cela comme un exercice, puisque ce sont les devoirs.

Un autre problème, signalé dans un commentaire, est que votre code ne doit pas être compilé tel quel, car vous essayez d'appeler un constructeur qui n'existe pas.

Si vous voulez appeler le this(i, null), vous avez besoin d'un constructeur qui prend (int, Cons) comme arguments.

0

Essayez de créer du code comme indiqué in wikipedia. Vous avez besoin des contenants pour les noeuds, et le nœud pour représenter un seul nœud dans la liste

0

Je pense que

next = this 

est faux, vous devriez plutôt créer une nouvelle entrée

next = new Cons(stuff); 
stuff = i; 

sinon l'entrée prochaine point à l'actuel! Notez que l'ordre des éléments est inversé si vous le faites de cette façon ..

+0

Cela mettra également les valeurs dans les mauvais endroits. – danben

0
public void push(int i) 
{ 
    stuff = i; 
    next = this; //here's the problem. 
} 

Vous devez quelque chose comme:

public void push(int i) 
{ 
    Cons newnext = new Cons(i) 
    tail.next = newnext; 
    tail = newnext; 
} 

et bien sûr, vous avez besoin d'une référence à la queue de votre lien liste quelque part.

Questions connexes