没有尾字段的链表陷入无限循环
LinkedList without tail field gets stuck in infinite loop
如果我想在没有尾字段的情况下实现它,我的 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
class:
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无效打印(){
节点 currNode = head;
while (currNode.hasNext()){
System.out.println(currNode.getItem());
currNode=currNode.getNext();
}
}
我得到了这个结果:
null
9
b
在您的 add
方法中,您的意思是:
currNode = currNode.getNext();
而不是:
currNode.setNext(currNode.getNext());
?因为最后一个没有效果,你在做一个无限循环...
这个区块永远不会结束
while (currNode.hasNext()) {
currNode.setNext(currNode.getNext());
}
如此无限循环。
确保将 currNode 向前移动,通过在 while 循环中添加 crrNode.next()
到达循环结束。
如果我想在没有尾字段的情况下实现它,我的 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
class:
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无效打印(){ 节点 currNode = head;
while (currNode.hasNext()){
System.out.println(currNode.getItem());
currNode=currNode.getNext();
}
}
我得到了这个结果:
null
9
b
在您的 add
方法中,您的意思是:
currNode = currNode.getNext();
而不是:
currNode.setNext(currNode.getNext());
?因为最后一个没有效果,你在做一个无限循环...
这个区块永远不会结束
while (currNode.hasNext()) {
currNode.setNext(currNode.getNext());
}
如此无限循环。
确保将 currNode 向前移动,通过在 while 循环中添加 crrNode.next()
到达循环结束。