Iterarea printr-o implementare a unei liste legate Java (Programare, Java, Lista, Listă Legată, Noduri)

Jae Kim a intrebat.

Am citit mai multe mesaje referitoare la acest subiect, dar toate se referă la iterarea printr-o listă legată care este deja implementată de Java; de exemplu, LinkedList<String> list = new LinkedList<String>();. Și apoi continuă să spună să folosiți o buclă for pentru a itera prin lista legată. Cu toate acestea, încerc să implementez propria mea listă legată și nu sunt sigur cum să iterăm prin ele. Cu alte cuvinte, am următorul cod:

class Node {
    private Node next = null; 
    private int data; 

    public Node(int d) {
        data = d; 
    }

    void appendToTail(int d) {
        Node end = new Node(d); 
        Node n = this; 
        while(n.next != null) {
            n = n.next; 
        }
        n.next = end; 
    }

    void print() {
        Node n = this; 
        while(n.next != null) {
            System.out.println(n); 
            n = n.next; 
        }
    }

    public static void main(String [] args) {
        Node x = new Node(4); 
        x.appendToTail(5); 
        x.print(); 
    }   
}

print() pe care am scris-o reprezintă efortul meu de a încerca să parcurg lista legată. Dar nu funcționează. Știe cineva cum să itereze prin lista legată, având în vedere propria implementare a listei legate?

Comentarii

  • Elaborați Dar nu funcționează –  > Por rakeb.mazharul.
3 răspunsuri
rakeb.mazharul

Modificați

while(n.next != null) 

în

while(n != null)

pentru că în interiorul buclei se tipărește valoarea curentă nodului curent n și apoi îl îndreptați către următorul nod de către: n = n.next;

Comentarii

  • Vă mulțumim! Trebuie doar să mă asigur că și eu fac System.out.println(n.data). –  > Por Jae Kim.
  • Da, ar trebui să tipărești. node.data și cu plăcere. –  > Por rakeb.mazharul.
Bohemian

Ar trebui să verificați n pentru null, nu n.next()::

while(n != null)

dar aveți toate aspectele unui for loop (starea inițială, condiția de terminare și expresia de iterație), așa că acest lucru poate fi mai bine exprimat ca un for buclă:

for (Node n = this; n != null; n = n.next)
    System.out.println(n.data);

YoungHobbit

Ar trebui să verificați dacă nodul curent este null sau nu, nu următorul nod. Pentru că în acest fel veți rata ultimul nod al listei, next partea va fi null pentru ultimul nod și bucla nu s-ar executa.

Trebuie să imprimați data o parte din nod. Nu ați definit funcția toString pentru clasa Node.

void print() {
  Node n = this;
  while(n != null) {
    System.out.println(n.data);
    n = n.next;
  }
}

Puteți defini metoda toString ca mai jos pentru metoda dvs. Node apoi puteți imprima direct metoda Node obiect în System.out declarație.

@Override
public String toString() {
  return "Node{" +
      ", data=" + data +
      '}';
}