我需要帮助Java中的循环双链表。
这是我的代码(最初由" sanfoundry编码&#34 ;;它使用接口):
LinkedList.java:
public class LinkedList<T extends Comparable<T>> implements
ILinkedList<T> {
private ILinkedListNode<T> head;
private ILinkedListNode<T> end;
private int size;
public LinkedList() {
head = null;
end = null;
head = null;
size = 0;
}
@Override
public void append(T element) {
ILinkedListNode<T> tempNode = new LinkedListNode(element, null, null);
if (head == null) {
head = tempNode;
end = head;
} else {
tempNode.setPrev(end);
tempNode.setNext(tempNode);
end = tempNode;
}
size++;
}
// should return element at position "index"
@Override
public T get(int index) {
return null;
}
@Override
public int size() {
return size;
}
@Override
public ILinkedListNode<T> getHead() {
return head;
}
}
现在我需要帮助才能让它发挥作用。我做错了什么,我需要在方法中编码&#34; public T get(int index)&#34;?对不起,我是Java noob :(
编辑:这是一个可能的解决方案吗?
public T get(int index){
T element = null;
if (index == 0) {
element = head.getElement();
} else if (index == size()-1) {
element = head.getPrev().getElement(); // end.getElement() also possible
} else {
ILinkedListNode<T> temp = head;
for (int i = 0; i < index; i++) {
temp = temp.getNext();
}
element = temp.getElement();
}
return element;
}
答案 0 :(得分:1)
您应该遍历LinkedList,随时跟踪当前位置。当您的当前位置等于传入的索引时,您可以从该节点返回T.
了解如何遍历链接列表here。
答案 1 :(得分:1)
尝试制作一些测试用例。理想情况下,您将需要使用真正的测试框架,但使用普通的主方法可以工作。例如:
public static void main(String[] args) {
ILinkedList<String> a = new LinkedList<String>();
System.out.println(a.size()); // 0
System.out.println(a.getHead()); // null
a.append("foo");
System.out.println(a.size()); // 1
System.out.println(a.get(0)); // "foo"
System.out.println(a.get(1)); // decide yourself what this should result in
a.append("bar");
System.out.println(a.size()); // 2
System.out.println(a.get(0)); // "foo"
System.out.println(a.get(1)); // "bar"
a.append("baz");
System.out.println(a.size()); // 3
System.out.println(a.get(0)); // "foo"
System.out.println(a.get(1)); // "bar"
System.out.println(a.get(2)); // "baz"
}
根据需要扩展测试。查看代码是否返回了您期望的代码,或者代码是否永远不会返回,或者抛出异常等等......最简单的方法是检查代码是否正常运行,实际上是运行它。 / p>
提示:截至本文撰写时,代码存在一些错误。
此外,如果代码可以按预期运行,请考虑: