2013-05-15 69 views
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()); 
    } 

}

+0

你'的print()'方法是一种误导 - 鉴于目前的实现,它应该被称为' getValue()' – Vladimir

回答

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

然后你就可以简单地做

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

(我改名为你的函数从printtoString给出更准确的描述)

0

考虑创建一个printall

public void printAll(){ 
    System.out.println(item); 
    if (next != null){ 
     next.printAll(); 
    } 
} 
1

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

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

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

public void printAll() { 
    print(); 
    if (next != null) { 
     System.out.println("; "); 
     next.printAll(); 
    } 
} 
+0

代码中存在一个错误。 next.printAll –

+0

@AdamGent,谢谢,修正 – Vladimir

0

print()函数返回仅这就是为什么它只是21

打印单个项目

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

0

调用list.print()只会返回头部的值(21) - 你永远不会对下一个节点进行任何引用或调用:next

就个人而言,我会删除print()方法,而是重写的toString():

​​

我猜你可能不希望空尾印刷,所以这可能是更好:

@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); 
} 
0

您可以使用foreach循环:

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

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