簡體   English   中英

將節點添加到最初為空的LinkedList

[英]Adding Node to Initially Null LinkedList

嘗試將節點添加到初始化為null的鏈表時遇到問題。 在我的方法中,我設置了一個測試用例,以檢查該節點最初是否為空,如果是,則使用傳入的值創建一個新節點。但是由於任何原因,除非該節點至少有一個已通過的元素,否則它不起作用簽入。簽出:

    Node addNode(Node node, int val)
    {
        if(node == null)
            {
                Node newNode = new Node(val);
                //node = newNode;
                return newNode;
            }
        node.next = addNode(node.next, val);
        return node;
    }

//Driver Class
    Scanner in = new Scanner(System.in);
    Node myNode = new Node(1);
    int numEntries = in.nextInt();
    for(int i = 0 ; i < numEntries ; i++)
    {
        int inputVal = in.nextInt();
        myNode.addNode(myNode, inputVal);
    }

如果將myNode初始化為空值(Node myNode = null;),則以上代碼將無法運行

完整代碼:

/* package whatever; // don't place package name! */

   import java.util.*;
   import java.lang.*;
   import java.io.*;




/* Name of the class has to be "Main" only if the class is public. */
    class Ideone
    {
     public static class Node
     {
         private int value;
         Node next;
         public Node()
         {
             next = null;
         }
         public Node(int val)
         {
            value = val;
            next = null;
        }
        Node addNode(Node node, int val)
        {
            if(node == null)
                {
                    Node newNode = new Node(val);
                    //node = newNode;
                    return newNode;
                }
            node.next = addNode(node.next, val);
            return node;
        }
    }

    public static void main (String[] args) throws java.lang.Exception
    {
        Scanner in = new Scanner(System.in);
        Node myNode = new Node(1);
        Node current = null;
        Node oddFirst = new Node(1);
        int numEntries = in.nextInt();
        for(int i = 0 ; i < numEntries ; i++)
        {
            int inputVal = in.nextInt();
            myNode.addNode(myNode, inputVal);
        }
        current = myNode;
        while(current != null) // Check if values were copied correctly
        {
            if(oddFirst == null) 
            {
                oddFirst = new Node(current.value);
            }
            oddFirst.addNode(oddFirst,current.value);
            //oddFirst = current.next;
            //oddFirst = oddFirst.next;
            current = current.next.next;
        }
        while(oddFirst != null)
        {
            System.out.println("Current Value: " + oddFirst.value);
            oddFirst = oddFirst.next;
        }
    }
}

鏈表的簡單解決方案:

class Node {
    int val;
    Node next;
}

public class LinkedList {
    public Node first;
    public Node last;
    public void addNext(int val) {
        Node node = new Node();
        node.val = val;
        if(last == null) {
            first = last = node;
        }
        else {
            last.next = node;
            last = node;
        }
    }
}

原始代碼的主要問題在於,它與空列表無關。 您無法確定列表由單個1值和空列表組成的情況。

因為您沒有處理addNode()的返回值。

您將在以下函數中返回節點:

Node addNode(Node node, int val)

但您不在此處處理退貨:

myNode.addNode(myNode, inputVal);

這應該可以幫助您找出解決方案。

暫無
暫無

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

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