繁体   English   中英

从单链表打印节点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM