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



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

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;
}

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

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

因此,让我们从 delete(Element) 方法开始。正如我所理解的,它需要采用一个元素,它是列表的头部,并删除列表的所有成员。设置 head = null 是行不通的,正如 @Dan Getz 所指出的那样。你需要能够获得实际的列表,而你所要做的就是元素,所以元素必须知道哪个列表包含它。这意味着您需要一个类型为"元素中的列表"的 myList 字段。那么你的删除(元素头)方法就可以了

head.myList.deleteAll();

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

或者,如果可以从您的 delete(元素头)方法访问 root,您可以这样做

head.myList.root = null;

关键是你必须以某种方式找到root,并且将其传递给其他方法并不能完成这项工作。

下面的旧答案,不太符合作业要求

首先删除参数。你不需要通过头。

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

返回 null 或以前的 head 值,以与您的 API 匹配者为准。

相关内容

  • 没有找到相关文章

最新更新