2017-03-09 90 views
0

我從頭開始實現我自己的java.util.linkedlist,所以我沒有使用任何java.util.linkedlist功能。這就是說,我目前正在嘗試創建我自己的toString方法。這是我的節點類我的鏈表的toString()方法只打印第一個元素

private static class Node<T>{ 

    private T data; 
    private Node<T> next; 

    public Node(T d){ 
    next= null; 
    data = d; 
    } 

    public Node(T d, Node<T> n){ 
    data = d; 
    next = n; 
    } 

    public T getData(){ 
    return data; 
    } 

    public void setData(T d){ 
    data = d; 
    } 

    public Node<T> getNext(){ 
    return next; 
    } 

    public void setNext(Node<T> n){ 
    next = n; 
    } 
} 

,這是我listclass

private Node<T> start; 
    private int size; 
    public ListNoOrder() { 
    start = null; 
    size = 0; 
} 

public void add(T newElt) { 

    Node<T> temp = new Node<T>(newElt); 
    Node<T> current = start; 

    try{ if (newElt==(null));} 
    catch (Exception illegalArgumentException){ 
    throw new IllegalArgumentException();} 

    if (start == null){ 
    start = new Node<T>(newElt, null); 
    } 

    if(current != null){ 
    while (current.next != null){ 
     current.setNext(temp); 
    } 
    } 
    size++; 
} 

public int length() { 
    return size;} 

,我的toString方法至今

public String toString() { 
    String toPrint = ""; 
    Node <T> current = start; 

    while (current != null){ 
    toPrint += current.getData(); 
    if (current.next != null) 
     toPrint += " ,"; 
    current = current.getNext(); 
    } 
return toPrint; 
} 

當我測試只打印的第一個元素的方法名單。

mockList = 7,8,15,62,38,3 whatItsPrinting = 7,

我已經掙扎小時。

+2

添加您的列表的初始化代碼(添加元素並調用toString方法的位置)。另外**哪裏是toString方法定義**?它似乎可以訪問私人'next'節點字段? –

+0

東西告訴我'start'實際上是你鏈中的最後一個節點 – AxelH

+0

你是什麼意思,toString是在哪裏定義的? @ m.antkowicz – rarayo55

回答

2

在你add方法,你在這裏開始

start = new Node<T>(newElt, null); 

設置只是start可變的,但你永遠不設置下一個節點,因爲startnext所以下面的條件是不正確的

if(current != null){ 
    while (current.next != null){ // this one! 
     current.setNext(temp); 
    } 
} 

即使這種情況是真的,它也不會真的起作用 - 你需要做的是獲得last節點(節點沒有next並且只設置它的next)。類似於

if(current != null) { 
    while(current.getNext() != null) { 
     current = current.getNext(); 
    } 
    current.setNext(new Node<T>(newElt)); 
} 
else { 
    current = new Node<T>(newElt, null); // because current is start 
} 
+0

ohhh我明白了......那麼我將如何設置下一個節點呢? – rarayo55

+0

看看我的編輯 –

+0

謝謝謝謝謝謝謝...我剛剛試圖抓住它的數據結構!謝謝。 @ m.antkowicz – rarayo55

相關問題