Optimale Möglichkeiten, um Traverse durch eine LinkedList - Java
Die Situation
Habe ich ein interview mit TripAdvisor morgen und ich entschied mich für die Praxis zu schaffen, meine eigenen LinkedList. Ich versuche herauszufinden, der beste Weg, um traverse durch.
Primäre Frage: ich habe es geschafft, traverse durch meine Verlinkte Liste, aber ich glaube, dass
es gibt einen besseren Weg, es zu tun. Wie würden Sie die traverse durch ?
Bonus-Frage: Wie kann meine gesamte Klassen Aussehen ? Ist es etwas, was ich sollte/sollte nicht hinzufügen ?
Es scheint gut zu funktionieren, aber ist es optimal ?
Bonus-Frage #2: zu guter Letzt wurde ich gefragt, ob anyonehad jeder Einblick auf typische interview-Fragen/Konzepte, die ich wissen muss ?
Sehr geschätzt.
Hier sind meine Klassen
//*********************************Node Class*******************************************
public class Node<T> {
Node<T> link;
T data;
public Node(T data) {
this.data = data;
link = null;
}
public T getData() {
return data;
}
public Node<T> getLink() {
return link;
}
public Node<T> setLink(Node<T> N) {
this.link = N;
return link;
}
public void setData(T newData) {
this.data = newData;
}
}
//****************************************Linked List Class*******************************
public class LinkedList<T> {
Node<T> head;
T data;
public LinkedList(){
head = null;
}
public void add(T data){
Node<T> newNode = new Node<T> (data);
newNode.setLink(head);
head = newNode;
}
//had problems printing out the data in the last node
public void traverse(){
Node<T> pointer;
pointer = head;
while (pointer.getLink()!=null){
System.out.println(pointer.getData());
pointer = pointer.setLink(pointer.getLink());
}
//Fixed problems For last node that doesnt get printed out
System.out.println(pointer.getData());
}
//Wieder gibt es einen besseren Weg, dies zu tun ?
//Danke
}
Versuchen Sie codereview.stackexchange.com
Warum können Sie nicht einfach verwenden
pointer = pointer.getLink();
, und while (pointer != null) {
(und entfernen Ihre Letzte Print-Anweisung)Interview-Fragen, die verknüpfte Listen in der Regel konzentrieren sich auf die "Entfernen" - operation, denn es hat einige interessante Rand-Fällen. Auch ein gemeinsames interview-Frage zu Folgen, so etwas wie dieses sein: "Wie würden Sie erkennen, a circular linked list oder enthält einen Zyklus?"
Vielen Dank für den Einblick! Kann nicht glauben, ich glaube nicht, dass die Lösung selbst
InformationsquelleAutor RonJermiah | 2013-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde ändern Sie Ihr traverse-Funktion zu sein, eher wie dieser:
Außerdem ist es üblich, repräsentieren die Knoten-Klasse als private innere Klasse von LinkedList, weil es in der Regel nicht erforderlich anderswo.
Soweit das interview selbst geht, traversal-Fragen sind typisch für Binär-Bäume (zB. drucken Sie die Elemente in sortierter Reihenfolge). LinkedList Fragen sind mehr konzentrierte sich auf das entfernen/einfügen Operationen, die beide erfordern eine sorgfältige Aufmerksamkeit auf die edge-Fälle (was passiert, wenn du den Kopf abnehmen zum Beispiel). Eine erweiterte LinkedList Frage Fragen würde, wie zu erkennen, ein Zyklus wäre, würde ich sicherstellen, dass ich wusste, dass mindestens eine Methode, dies zu tun (haben Sie einen Blick auf die Schildkröte und der Hase-Algorithmus).
EDIT:
Algorithmus Fragen fast immer werden aus der folgenden Liste:
Sehen diese und diese, um Fragen zu Java selbst
InformationsquelleAutor Samuel O'Malley