我创建了一个节点类,它是一个链表类。有什么方法可以打印出这个列表中的元素吗?我创建了print()
方法,但它只返回第一个元素21.我如何遍历该列表?
public class ListNode {
private int item;
private ListNode next;
public ListNode(int item, ListNode next){
this.item = item;
this.next = next;
}
public ListNode(int item){
this(item, null);
}
public int print(){
return item;
}
public static void main(String[] args) {
ListNode list = new ListNode(21, new ListNode(5, new ListNode(19, null)));
System.out.println(list.print());
}
}
答案 0 :(得分:4)
public String toString() {
String result = item + " ";
if (next != null) {
result += next.toString();
}
return result;
}
然后你可以简单地做
System.out.println(list.toString());
(我将您的功能从print
重命名为toString
,以更准确地说明其功能。
答案 1 :(得分:1)
您当前的实现不会打印任何内容:它只返回项目。 更合适的实现方式如下:
public void print() {
System.out.println(item);
}
然后,您可以使用递归打印所有项目:
public void printAll() {
print();
if (next != null) {
System.out.println("; ");
next.printAll();
}
}
答案 2 :(得分:0)
考虑创建printall
public void printAll(){
System.out.println(item);
if (next != null){
next.printAll();
}
}
答案 3 :(得分:0)
您的print()
功能只返回一个项目,这就是它只打印21的原因。
递归调用以打印所有值,直到next != NULL
答案 4 :(得分:0)
调用list.print()
只会返回头部的值(21) - 您永远不会进行任何引用或调用下一个节点:next
。
就个人而言,我会删除print()方法,而是覆盖toString():
@override
public String toString(){
return item + "\n" + next;
}
我猜你可能不希望打印空尾,所以这可能更好:
@override
public String toString(){
if(next) {
return item + "\n" + next;
} else {
return item + "\n";
}
}
然后,主要:
public static void main(String[] args) {
ListNode list = new ListNode(21, new ListNode(5, new ListNode(19, null)));
System.out.println(list);
}
答案 5 :(得分:0)
您可以使用foreach循环:
List<ListNode> theList = new LinkedList<ListNode>();
//add stuff to the list
for(ListNode n:theList)
System.out.println(n.print();
这将迭代列表并返回下一个对象,在此对象上我们称之为print()
方法