1

我做了一个节点类,它是一个链表类。有什么办法可以打印出这个列表中的元素吗?我创建了我的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());
    }

}

4

6 回答 6

4
public String toString() {
    String result = item + " ";
    if (next != null) {
        result += next.toString();
    }
    return result;
}

然后你可以简单地做

System.out.println(list.toString());

(我将您的函数从printto重命名toString为更准确地描述它的作用)

于 2013-05-15T12:34:43.683 回答
1

您当前的实现不打印任何内容:它只是返回 item。更合适的实现如下所示:

public void print() {
    System.out.println(item); 
}

然后,您可以使用递归打印所有项目:

public void printAll() {
    print();
    if (next != null) {
        System.out.println("; ");
        next.printAll(); 
    }
}
于 2013-05-15T12:36:44.923 回答
0

调用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";
    }
}

然后,主要:

public static void main(String[] args) {            
    ListNode list = new ListNode(21, new ListNode(5, new ListNode(19, null)));
    System.out.println(list);
}
于 2013-05-15T12:39:27.030 回答
0

您的print()函数只返回一个项目,这就是它只打印 21 的原因。

递归调用以打印所有值,直到next != NULL

于 2013-05-15T12:36:53.957 回答
0

您可以使用 foreach 循环:

List<ListNode> theList = new LinkedList<ListNode>();
//add stuff to the list
for(ListNode n:theList)
   System.out.println(n.print();

这将遍历列表并返回下一个对象,在这个对象上我们调用print()方法

于 2013-05-15T12:44:18.240 回答
0

考虑创建一个printall

public void printAll(){
    System.out.println(item);
    if (next != null){
        next.printAll();
    }
}
于 2013-05-15T12:34:26.067 回答