Java - 删除整个链表并不会影响实际列表

时间:2015-06-14 18:00:14

标签: java recursion linked-list

我输入递归方法来删除简单链表中的所有节点,但事实上调试器显示这种方法不会影响实际列表,我也不知道为什么它会像那样。这是我的代码:

class List
{ Element root; ...}

class Element
{int value; Element next; ...}


Element delete(Element head)
{
 if(head == null) return null;
 head = delete(head.next);
 return head;
}

1 个答案:

答案 0 :(得分:2)

删除方法中没有任何内容可以删除任何内容,即它不会更改列表,也不会更改列表中的任何元素。它所做的只是搜索整个列表以找到其.next()为null的元素,然后返回null。

你必须在某处实际更改一个值。

所以让我们从delete(Element)方法开始。正如我已经明白的那样,它需要一个Element,它是List的头部,并删除List的所有成员。正如@Dan Getz所说,设置head = null不会起作用。您需要能够获得实际列表,并且您必须使用的是Element,因此Element必须知道哪个List包含它。这意味着您需要一个List中的List类型的myList字段。然后你的删除(元素头)方法可以做

head.myList.deleteAll();

这需要List中的deleteAll()方法,它将设置root = null;

或者,如果可以从删除(元素头)方法访问root,则可以执行

head.myList.root = null;

重点是你必须以某种方式获得root权限,并将其传递给其他方法并不能完成这项任务。

下面的旧答案,并不完全符合作业要求

首先删除参数。你不需要传递头脑。

然后,在正文中,只需设置head = null(假设你有一个名为head的字段)。

返回null或head的前一个值,无论哪个匹配您的API。

相关问题