2016-04-24 19 views
2

ich mit Zählung der Elemente meiner doppelt verknüpften ListeFinding Länge der doppelt verknüpften Liste

hier ist die Knotenklasse einige Probleme habe:

public class Node { 
    private Node previous, next; 
    private Object data; 

    public Node(Object data) { 
    this.data = data; 
    } 

    public Node() { 

    } 

    public Node(Object data, Node previous, Node next) { 
    this.previous = previous; 
    this.next = next; 
    this.data = data; 
    } 

    public Node getPrevious() { 
    return previous; 
    } 

    public void setPrevious(Node previous) { 
    this.previous = previous; 
    } 

    public Node getNext() { 
    return next; 
    } 

    public void setNext(Node next) { 
    this.next = next; 
    } 

    public Object getData() { 
    return data; 
    } 

    public void setData(Object data) { 
    this.data = data; 
    } 

}

und hier ist, wo ich habe meine Methoden für meine doppelt verkettete Liste

beim Testen sollte das Ergebnis sein sei 5, aber meine Funktion zählt nichts. Danke für die Hilfe!

+1

Wenn Sie keine zirkuläre Liste haben, ist Ihre Schleifenbedingung falsch. Es sollte wahrscheinlich 'while (temp! = Null) sein' – nem035

+0

Sorry, ich habe vergessen zu erwähnen, es ist eine zirkuläre Liste. Meine schlechte :( –

Antwort

0

Die andere Antwort wird nicht ganz funktionieren, wenn Base das einzige Element ist. Es sollte noch eine Weile, wie:

public int size() { 
    int count = 0; 
    if (base.getNext() == base) 
     return count; 
    else { 
     Node temp = base.getNext(); 
     while (temp != base) { 
      temp = temp.getNext(); 
      count++; 
     } 
    } 
    return count; 
} 

Ihr Code wurde unter der Annahme, dass Sie eine kreisförmige doppelt verketteten Liste verwendet hat, und dies setzt eine Null-terminierte Liste. Für was wolltest du?

+0

Sorry, ich habe vergessen zu erwähnen, dass es eine zirkuläre Liste ist –

+0

Got it! Dieser Code wird dann funktionieren. – rosstex

+0

Danke für die Hilfe! Ich bekomme eine Nullzeiger Ausnahme und ich bin mir nicht sicher warum. –

0

Ich denke, Ihre vorherigen Code wurde unter der Annahme, dass Sie einen kreisförmigen doppelt verketteten Liste verwendet haben, und die Antwort von alpert sorgt für eine nicht-kreisförmig verbundenen Liste zählen

Wenn Sie eine kreisförmige doppelt verknüpfte Liste erstellen möchten versuchen die folgenden: setNext(Node node) Sie node.previous = this;

setPrevious(Node node) gesetzt, sollten Sie setzen sollten node.next = this;

0

sollten Sie für temp != null Überprüfung werden, aber eigentlich sollte Ihr Code viel einfacher sein.

tun Nur soviel:

public int size() { 
    int count = 0; 
    for (Node node = base; node != null; node = node.getNext()) 
     count++; 
    return count; 
} 

Weniger Code weniger Fehler bedeutet, und es ist einfacher zu lesen und zu verstehen.

Verwandte Themen