我实现了一个链表,每次调用函数时,它们都将它们的元素放在列表前面,例如:
30-->40
|
first
//add 50
30-->40-->50
|
first
我实现的代码如下:
public class Node {
public int elem;
Node next;
public Node(int e){
this.elem=e;
}
}
public class List {
Nodo list;
Nodo first;
public void addFront(int n){
Nodo temp=new Nodo(n);
if (list==null){
first=temp;
}
else{
list.next=temp;
}
list=temp;
}
public void print(){
Nodo current;
current=first;
while (current!=null){
System.out.println(current.elem);
current=current.next;
}
}
public Nodo deletefirst(){
first=first.next;
return list;
}
public int size(){
Nodo temp;
temp=first;
int c=0;
while (temp!=null){
c++;
temp=temp.next;
}
return c;
}
我遇到的问题出在我的主程序中,当我做这样的事情时:
List list4=new List();
list4.addFront(10);
list4.addFront(20);
list4.addFront(40);
list4.addFront(60);
list4.addFront(80);
for (int i=0;i<list4.size();i++){
List4.deletefirst();
System.out.println("List");
List4.print();
}
可视化的列表如下:
list
20
40
60
80
list
40
60
80
list
60
80
如何更改我的代码以使其打印列表的缺失值,我的意思是:
list
80
list
null
有什么帮助吗?
在列表前面添加:
public class List {
Nodo first;
public void addFront(int n){
Nodo temp = new Nodo(n);
temp.next = first;
first = temp:
}
通常first
被命名为head
"列表的负责人"。
只需要一个字段即可指向第一个节点。
调试代码最好通过心理执行在纸上完成。
将 for 循环更改为 while 循环。
List list4=new List();
list4.addFront(10);
list4.addFront(20);
list4.addFront(40);
list4.addFront(60);
list4.addFront(80);
while (list4.size() > 0){
list4.deletefirst();
System.out.println("List");
List4.print();
}
您使用的 for 循环增加了 i,同时减小了列表的大小,该列表的大小对于逐个错误或在你的情况下出现两个错误已经成熟。
重要的是要注意,我使用了 .isEmpty(( 与 <0。这在此代码片段中无关紧要,但这是最佳实践。@azurefrog提出了一个观点,即这是一个没有isEmpty((
这不是一个正确的答案,但我没有足够的观点来评论。您可能对迭代器感兴趣。您可能需要将Nodo列表更改为java.util.List,但是您可以非常轻松地使用列表来声明Iterator<Nodo> it = list4.list.iterator()
。循环将变为:
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println(it.next()); //outside the loop it.next() point to null