我正在用Java编写链表。以下是代码:
public class FunctionalList<T> {
class Node {
private T data;
private Node next;
//constructor
public Node(T data, Node next)
{
this.data = data;
this.next = next;
}
}
private Node head;
/**
* default constructor, create an empty list
*/
public FunctionalList() {
head = null;
}
public FunctionalList<T> add( T element ) {
FunctionalList<T> newList = new FunctionalList<T>();
add_aux(newList.head, element);
return newList;
}
private void add_aux(Node node, T element)
{
if (node == null)
{
Node newNode = new Node(element, null);
node = newNode;
}
else if (node.next != null) // go to the end of the list
{
add_aux(node.next, element);
}
else
{
Node newNode = new Node(element, null); // create new node
node.next = newNode; //add the element to the list
}
}
}
我以递归方式实现了add方法。当我尝试将一个元素添加到列表中时,我失败了。我跟踪了add_aux(newList.head,element)之后的问题 - newList.head仍为null。
答案 0 :(得分:1)
Node newNode = new Node(element, null);
node = newNode;
这是因为您要为方法本地的node
变量分配引用,并假设它将反映到newList.head
中。
一种方法是始终返回node
并将其分配给newList.head
。这样,它将具有列表的开头。所以你的方法定义如下:
private Node add_aux(Node node, T element) {
.... // all the code is same.
return node; // add this in the end.
}