2013-05-15 73 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()方法上