java - list教學 - 將一個對象添加到一個類中的鏈接列表的末尾




python linked list教學 (2)

addToEnd方法有幾個問題。 讓我們一步一步來說明問題。

  1. 當你調用test3.addToEnd你首先檢查while循環條件,因為next不是null,所以你進入循環。
  2. 發生的第一件事情是將當前節點的數據從“再見”重新分配為“已添加的項目”(但不會將原始值存儲在任何地方)。
  3. 然後,您將下一個節點的數據分配給新數據(現在“AddedItem”而不是“Goodbye”,因為它在上一步中被重新分配)。
  4. 當前的next是下一個節點的next一個節點,從列表中刪除“Thanks”。
  5. 循環重複,這次從列表中刪除“hello”。

在這一點上剩下的唯一東西就是最初是“再見”的節點,但已經被改為“AddedItem”,這就是所有打印出來的節點。

你可能應該做的是addToEnd創建addToEnd一個新實例,並指向它next的當前節點,如下所示:

public ExampleLinkedList addToEnd(String item)
{
    return new ExampleLinkedList(item, this);
}

然後改變你的測試的最後兩行是這樣的:

ExampleLinkedList test4 = test3.addToEnd("AddedItem");
System.out.println(test4);

或者,您可以完全避免addToEnd()方法,只需在添加新節點時使用構造函數即可。 這是因為addToEnd()在這一點上是多餘的,因為它只是構造函數的一個包裝。

我對LinkedList有點新,我想通過在ExampleLinkedList類中創建方法來練習。 test3中有一個列表。 當我打電話test3我得到了再見,謝謝你好。 我想要的是添加“AddedItem”在列表的最後得到AddedItem再見謝謝你好,但我只得到了AddedItem作為結果。 我怎樣才能解決我的addToEnd方法,而不寫一個新的類。

public class ExampleLinkedList 
{
    private String data;
    private ExampleLinkedList next;

    public ExampleLinkedList(String data,ExampleLinkedList next)
    {
        this.data = data;
        this.next = next;
    }

    public void addToEnd(String item)
    {
        while(next != null)
        {
            data = item;
            next.data = data;
            next = next.next;   
        }
    }

    public boolean isEmpty()
    {
        if(next == null)
        {
            return true;
        }
        return false;
    }

    public String toString()
    {
        String result = data;
        while(next != null)
        {
            result = result + " " + next.data;
            next = next.next;
        }
        return result;
    }

}

public class Test 
{     

    public static void main(String[] args) 
    {
        ExampleLinkedList test1 = new ExampleLinkedList("Hello", null);
        ExampleLinkedList test2 = new ExampleLinkedList("Thanks", test1);
        ExampleLinkedList test3 = new ExampleLinkedList("Goodbye", test2);

        test3.addToEnd("AddedItem");
        System.out.println(test3);
    }
}

如何跟隨,因為它是一個新的節點...

public ExampleLinkedList addToEnd(String item)
{
   return new ExampleLinkedList(item,this);
}

所以完整的代碼可以...

public class ExampleLinkedList
{
    private String data;
    private ExampleLinkedList next;

    public ExampleLinkedList(String data, ExampleLinkedList next)
    {
        this.data = data;
        this.next = next;
    }

    public ExampleLinkedList addToEnd(String item)
    {
       return new ExampleLinkedList(item,this);
    }

    public boolean isEmpty()
    {
        if(next == null)
        {
            return true;
        }
        return false;
    }

    public String toString()
    {
        String result = data;
        while(next != null)
        {
            result = result + " " + next.data;
            next = next.next;
        }
        return result;
    }


    public static void main(String[] args)
    {
        ExampleLinkedList test1 = new ExampleLinkedList("Hello", null);
        ExampleLinkedList test2 = new ExampleLinkedList("Thanks", test1);
        ExampleLinkedList test3 = new ExampleLinkedList("Goodbye", test2);

        ExampleLinkedList myItem = test3.addToEnd("AddedItem");
        System.out.println(myItem);
    }
}

輸出:

AddedItem Goodbye Thanks Hello






linked-list