【发布时间】:2016-03-04 21:25:27
【问题描述】:
当我尝试将节点添加到初始化为 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;
}
}
}
【问题讨论】:
-
你是说你试图将
myNode初始化为null,然后在for循环中调用myNode.addNode()? -
@gla3dr 是的,这就是我的意思。
-
为什么不使用 java.util.LinkedList?并简单地做 list.add(new Node(inputVal));您是否有不允许标准库中现有的链表实现的特殊需求?
-
@reegnz 我正在练习面试,所以我应该知道如何从头开始实现链表
-
好吧,首先你不能在 null 上调用像
addNode这样的方法。
标签: java algorithm list recursion null