情况
我明天接受了TripAdvisor的采访,我决定练习创建自己的自定义LinkedList。我正试图弄清楚穿越它的最佳方式。
主要问题:我已经设法遍历我的链接列表,但我相信 有一个更好的方法来做到这一点。你会如何穿越它?
奖金问题:我的整体课程如何?有什么我应该/不应该添加的吗? 它似乎工作正常,但它是最佳的吗?
奖金问题#2:最后我想知道是否有人对我必须知道的典型面试问题/概念有任何见解?
非常感谢。
这是我的课程
// *********************************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());
}
//再次有更好的方法吗? //谢谢 }
答案 0 :(得分:5)
我会将您的遍历函数更改为更像:
public void traverse(){
Node<T> pointer = head;
while (pointer != null){
System.out.println(pointer.getData());
pointer = pointer.getLink();
}
}
通常将Node类表示为LinkedList的私有内部类,因为在其他任何地方都不需要它。
就访谈本身而言,遍历问题对于二元树更为典型(例如,按排序顺序打印出元素)。 LinkedList问题更侧重于删除/插入操作,这两个操作都需要仔细注意边缘情况(例如,当您移除头部时会发生什么)。一个更高级的LinkedList问题会询问如何检测一个循环,我会确保至少知道一种方法(看看Tortoise and the Hare algorithm)。
修改强>
算法问题几乎总是来自以下列表: