簡體   English   中英

遞歸地將新節點添加到 LinkedList 的末尾?

[英]Recursively adding a new node to the end of a LinkedList?

嘗試編寫遞歸方法以將新節點添加到 LinkedList 的末尾時遇到很多麻煩。 我已經盯着這個看很久了,但我的終端仍然在打印空白……如果有人能幫助我,我將不勝感激! 仍然試圖讓我的頭腦圍繞遞歸的概念。 如果我嘗試使用 while 循環迭代地解決問題,那么我可以毫無問題地做到這一點,但是我的作業要求我遞歸地編寫它。 謝謝您的幫助 :)

public class LinkedList
{
    //
    //Instance variable
    //
    private Node top;


    //
    //Instance and static methods below
    //

    //Accessor for the top Node
    public Node getTop()
    {
        return top;
    }

    public void add(Object data) {
        Node newNode = new Node(data,null);
        addRec(top,newNode);
}

    private Node addRec(Node start, Node newNode) {
        if (start == null) {
            start = newNode;
            return start;
        }
        start.setLink(addRec(start.getLink(), newNode));
        return start;
    }

    public String toString() {
        String value = "";
        Node current = top;
        while (current != null) {
            value += current.getData();
            current = current.getLink();
        }
        return value;
    }

節點類:

public class Node
{
    //
    //Instance variables
    //
    private Object data;
    private Node link;

    //
    //Constructor
    //
    public Node (Object initData, Node initLink)
    {
        data = initData;
        link = initLink;
    }

    //
    //Accessors
    //
    public Object getData()
    {
        return data;
    }

    public Node getLink()
    {
        return link;
    }

    public void setData(Object data) {
        this.data = data;
    }

    //
    //Mutators
    //
    public void setLink(Node newLink)
    {
        link = newLink;
    }
}

向鏈表遞歸添加節點是一個相當簡單的概念。 讓我們看一下算法:

1] 如果給定的節點后面沒有節點(我們稱之為下一個節點),我們添加當前節點。

2] 否則,我們將該節點添加到下一個節點。 這將涉及在下一個節點上執行步驟 1。

如果您注意到,第 2 步會遞歸調用第 1 步,因為它引用了同一個節點。

為了實現這一點,首先,我們在 LinkedList 中創建一個名為 Node 的子類。 這將需要一個 int 來存儲數據,以及一個指向下一個 Node 的 Node。

我們在 Node.js 中創建了 add() 方法。

為了實現步驟 1,我們檢查 next 是否等於 null。 如果是,我們將節點添加為鏈表上的下一個。

if(this.next== null)this.next= toAdd;

要實現第 2 步,我們另說,我們在下一個 Node 上調用 add 方法,並將值傳遞給 add。

if(this.next== null)this.next= toAdd;

現在,我們必須在類 LinkedList 中實現它。

我們聲明一個根節點,列表開始的地方。

現在,我們聲明一個將執行以下操作的方法:

給 root 添加一個值。

就是這樣。

遞歸處理剩下的事情。

想一想,如果root后面有一個節點,數據就會被添加到下一個節點,依此類推。

因此,問題排序,你有你的清單!

    public class LinkedList
{
    private Node root;

    private class Node{
        int data;
        Node next;
        public Node(int data){

            this.data = data;
            this.next = null;

        }

        public void add(Node toAdd){

            if(this.next== null)this.next= toAdd;
            else this.next.add(toAdd);

        }

    }

    public LinkedList(int root){

        this.root = new Node(root);
    }

    public void add(int toAdd){
        this.root.add(new Node(toAdd));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM