【发布时间】:2014-04-15 04:43:54
【问题描述】:
我的代码似乎出现了一些逻辑问题,我是编程新手,尤其是链表新手。 我在 DLL 中的方法看起来如何?从我的应用程序类调用时,它们似乎不起作用(添加后仅适用于第一个单词)。
public void addAfter(E elem, E prev) { //use search method then insert
if (search(prev) == null){
insert(elem, last);
}
else{
insert(elem, prev); //prev needs to be of type Node<E> rather than just <E> (????)
}
}
private void insert(E elem, Node<E> prev) { //HELP
Node<E> newNode = new Node<E>(elem, prev, null);
//if list is empty, add to front
if (first == null) {
first= newNode;
last = newNode;
} else if (prev == null){
//addFirst(newNode);
first.prev = newNode;
newNode.next = first;
first = newNode;
}
//if at end of list
else if (prev.next == null){
prev.next = newNode;
last = newNode;
}
else{
newNode.next = prev.next;
newNode.next.prev = newNode;
prev.next = newNode;
}
}
* @param elem The element to search for.
* @return The first Node containing the given element, or null if no Node
* contains the element.
*/
private Node<E> search(E elem) { //HELP
for (Node<E> curr = first; curr != null; curr = curr.next){
if (curr.element.equals(elem)){
return curr;
}
}
return null;
}
public static void handleLine(String values, DLL<String> list){
Scanner tokens = new Scanner(values);
if (tokens.hasNext("[aesdpr]")){
char command = tokens.next().charAt(0);
System.out.println("test before switch");
switch (command){
case 'a':
while (tokens.hasNext()){
String nextToke = tokens.next();
if (tokens.hasNext()){
list.addAfter(nextToke, tokens.next());
【问题讨论】:
-
我认为这是家庭作业,因为 Java 中已经有一个双向链表,因此没有充分的理由自己实现一个。审查代码超出了 stackoverflow 的范围。我建议您阅读 LinkedList 中的代码,看看它是如何完成的,并将您编写的内容与他们编写的内容进行比较。
-
您应该指定问题所在。给出一个你得到错误结果的操作示例,包括输入、预期输出和实际输出。
标签: java algorithm list doubly-linked-list