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

Java-删除整个链表不会';不影响实际列表,java,recursion,linked-list,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; }

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

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

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

你必须在某处改变一个值

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

head.myList.deleteAll();
这需要列表中的deleteAll()方法,该方法将设置root=null

或者,如果可以通过delete(Element head)方法访问root,则可以执行以下操作

head.myList.root = null;
关键是,您必须以某种方式找到根,而将其传递给其他方法并不能完成这项工作

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

从删除参数开始。你不需要在头上传球

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


返回null或head的上一个值,以与API匹配的为准。

如何调用此方法?为什么希望它删除所有节点?请显示此方法的调用,以证明代码工作不正常。注意,因为Java是一种垃圾收集语言,所以整个过程相当于
head=null
assignment;测试显然是空的,所以它真的那么简单吗?我真的需要像这样调用方法:delete(Element head){head=null;}?为什么不应该呢?你的基本情况是什么?你的基本情况返回什么?我的基本情况返回null,我知道,但我不知道为什么它不影响实际列表?谢谢,那么它真的那么简单吗?我的意思是这是我的家庭作业,我发现这不可能这么简单,所以我使用了递归,但正如你所说的,我只会将参数设置为null,并返回以前的值。我永远不会假设一定有更难的事情。:-)顺便说一下,如果你喜欢这个答案,请考虑接受它。不,将参数设置为<代码> null <代码>没有任何效果。Erick的建议是,如果您有一些字段要设置为空,那么就这样做。@Gregg首先告诉我们您对链表的表示是什么。现在我们都在猜测。