如果我想在没有尾部字段的情况下实现它,我的LinkedList add方法有什么问题?
public class LinkedList<E> {
private Node<E> head= new Node<E>();
private int size=0;
public void linkedList(){
head=null;
size=0;
}
public void add(E data){
Node<E> currNode=head;
while (currNode.hasNext()){
currNode.setNext(currNode.getNext());
}
Node<E> lastNode= new Node<E>();
lastNode.setItem(data);
lastNode.setNext(null);
currNode.setNext(lastNode);
size++;
}
public void remove(int i){
Node<E> currNode = head;
int index=0;
while (index<i){
currNode.setNext(currNode.getNext());
i++;
}
currNode.setNext(currNode.getNext().getNext());
}
public void print(){
Node<E> currNode = new Node<E>();
do{
System.out.println(currNode.getItem());
} while (!currNode.hasNext());
}
public static void main(String arc[]){
LinkedList<String> ll = new LinkedList<String>();
ll.add("9");
ll.add("b");
ll.add("987");
ll.print();
return;
}
}
这是Node
类:
public class Node<E> {
private E item;
private Node<E> next;
public Node<E> getNext(){
return this.next;
}
public void setNext(Node<E> n){
this.next=n;
}
public E getItem(){
return this.item;
}
public void setItem(E item){
this.item=item;
}
public boolean hasNext(){
return (this.next != null);
}
}
编辑:将打印方法更改为: public void print(){ Node currNode = head;
while (currNode.hasNext()){
System.out.println(currNode.getItem());
currNode=currNode.getNext();
}
}
我得到了这个结果:
null
9
b
答案 0 :(得分:3)
在add
方法中,您的意思是:
currNode = currNode.getNext();
而不是:
currNode.setNext(currNode.getNext());
?因为最后一个没有效果,你正在进行无限循环......
答案 1 :(得分:1)
此块永远不会结束
while (currNode.hasNext()) {
currNode.setNext(currNode.getNext());
}
如此无限循环。
确保将currNode移动到前方,通过在while循环中添加crrNode.next()
来到达循环结束。