[英]printing nodes from a singly-linked list
我做了一个节点 class,它是一个链表 class。有什么办法可以打印出这个列表中的元素吗? 我创建了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());
}
}
public String toString() {
String result = item + " ";
if (next != null) {
result += next.toString();
}
return result;
}
然后您可以简单地做
System.out.println(list.toString());
(我将您的函数从print
重命名为toString
,以更准确地描述其功能)
您当前的实现不输出任何内容:它仅返回item。 更合适的实现如下所示:
public void print() {
System.out.println(item);
}
然后,您可以使用递归来打印所有项目:
public void printAll() {
print();
if (next != null) {
System.out.println("; ");
next.printAll();
}
}
考虑创建一个printall
public void printAll(){
System.out.println(item);
if (next != null){
next.printAll();
}
}
您的print()
函数仅返回一个项目,这就是为什么仅打印21个项目的原因。
递归调用以打印所有值,直到next != NULL
调用list.print()
只会返回head(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";
}
}
然后进入main:
public static void main(String[] args) {
ListNode list = new ListNode(21, new ListNode(5, new ListNode(19, null)));
System.out.println(list);
}
您可以使用foreach循环:
List<ListNode> theList = new LinkedList<ListNode>();
//add stuff to the list
for(ListNode n:theList)
System.out.println(n.print();
这将遍历列表并返回下一个对象,在该对象上,我们调用print()
方法
将列表转换为数组var arr = list.toArray();
之后打印数组System.out.println(Arrays.toString(arr));
public int[] toArray(){
int [] arry = new int[size];
var current = first;
var index = 0;
while (current!=null){
arry[index++] = current.value;
current = current.next;
}
return arry;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.