2016-05-03 12 views
-1

nehme ich eine verkettete Liste Klasse von Grund auf, wie gebaut haben:Wie erstellt man eine verknüpfte Liste mit Array-Elementen?

public class BookLink { 
    private Book myBook; (Book is another class I already have defined) 
    private BookLink nextLink; 

    public BookLink (Book someBook) { 
     myBook = someBook; 
     nextLink = null; 

    public void setNextLink (Book nextBook){ 
     nextLink = nextBook; 
} 

Und dann nehme ich ein Array hatte (Buch []) myBooks genannt. Wie kann ich das Array elegant durchlaufen und daraus eine Linked List mit der oben genannten Klasse erstellen? Mit anderen Worten, myBooks [0] würde als der Kopf gesetzt werden, myBooks [1] wäre das nächste Glied in der Kette den ganzen Weg bis myBooks [myBooks.length-1] das Heck ist?

Hinweis: Ich habe nicht alle Methoden in der BookLink-Klasse aufgelistet, die es normalerweise geben würde, z. getNextLink oder get/setMyBook. Wenn es notwendig ist, die Frage zu beantworten, können Sie sich gerne auf die Methoden beziehen, als ob sie existieren würden. Vielen Dank!

+1

Sie sollten zuerst die Definition der verknüpften Liste vervollständigen. Eine vollständig verknüpfte Listendefinition setzt den Kopf und fügt Elemente hinzu. Sie können dann einfach über die Liste iterieren und Elemente in die Liste einfügen. – aec

+1

'nextLink' hat den Typ' BookLink', aber Sie ordnen ihm 'Book' zu –

+0

Sie müssen Ihre verknüpfte Liste wirklich vollständig codieren, bevor Sie den nächsten Schritt versuchen. Ich weiß, dass du gesagt hast, dass du die ganze Klasse nicht in deine Frage gestellt hast, aber ohne sie können wir dir nicht weiter helfen. –

Antwort

-1

Angenommen, Sie haben Ihre verknüpfte Liste richtig implementiert, Sie könnten es so einfach wie das tun.

public void insert(Book[] books) { 
    for (int i = 0; i < books.length; i++) { 
     insert(books[i]); 
    } 
} 

public void insert(Book book) { 
    if (this.head == null) { 
     this.head = new BookLink(book); 
    } else { 
     Node temp = this.head; 
     while (temp.getNext() != null) { 
      temp = temp.getNext(); 
     } 
     temp.setNext(new BookLink(book)); 
    } 
} 
+0

Das steckt in einer Endlosschleife? Du rufst dich an? –

+0

@blahfunk Dank der Methode [overloading] (https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html) erkennt Java, dass es einen Unterschied zwischen 'public void insert (Books []) gibt. 'und' public void (Buch) '. – Fjotten

+0

Wer ist das dann? 'insert (book)' ist eine Methode für welches Objekt? –

0

Sehr leicht:

BookLink current = null; 
for (int i = books.length - 1; i >= 0; i--) { 
    BookLink newHead = new BookLink(books[i]); 
    newHead.setNextLink(current); 
    current = newHead; 
} 

Nur iterieren rückwärts und bauen es ab zum Ende.

0

Oder so. Verwenden Sie einen Dummy head, und geben Sie das head.nextLink zurück, wenn Sie fertig sind, um die Schleife zu erstellen.

BookLink head = new BookLink(null); 
BookLink ptr = head. 

for(int i = 0; i < books.length; i++) { 
    ptr.nextLink = new BookLink(books[i]); 
    ptr = ptr.nextLink; 
} 

return head.next;