&引用;通告";Java中的对象参数
假设给我一个带有定义的链表(Java)&引用;通告";Java中的对象参数,java,algorithm,linked-list,Java,Algorithm,Linked List,假设给我一个带有定义的链表(Java) public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } 我得到了链接列表的一个实例: 1->2->3->4 在下面的函数中,我可以访问值为3的节点,即3 public void remove (ListNode node){ node = node.next; } 链表是否变为1->2->4 我试图将
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
我得到了链接列表的一个实例:
1->2->3->4
在下面的函数中,我可以访问值为3的节点,即3
public void remove (ListNode node){
node = node.next;
}
链表是否变为1->2->4
我试图将此解决方案提交给在线法官,但没有任何效果。帮忙
public void remove (ListNode node){
node = node.next;
}
这只会影响您当前持有的本地引用。要删除节点,必须操作其前一个节点的next
变量,该变量不可用,因为它是一个单链表
理论上你所能做的就是:
public void removeNext (ListNode node) {
node.next = node.next.next;
}
在示例列表上调用此方法时,必须分别使用值为2的节点。Java参数是通过值传递的
调用remove
时,将传入对节点的引用副本。您的代码试图通过设置node=node.next()
本地更改此引用,但这不会影响原始列表
remove
方法需要做的是在列表中找到节点,该节点有一个next
,该节点指向要删除的节点,并将其更改为指向要删除的节点之后的节点。假设有一个方法可以找到一个名为findParentOf()
的给定节点的父节点:
它什么也不做,因为当本地引用变量node
设置为node.next
时,它从指向val为3的节点转到val为4的节点
||
\/
1->2->3->4
变成
||
\/
1->2->3->4
您当前的输出是什么?@Omore,1->2->3->4
,没有更改任何内容。因为您只是更改了参数变量的值,而不是任何对象的任何字段。不过传入了一个引用,因此它应该会对原始内容进行修改。我想我不应该看到您在说什么。当我们说node=node时,我们所要做的就是改变节点指向的是什么?正确吗?@fasasa传递了引用的副本。如果将本地副本设置为引用另一个节点,则不会更改原始列表。是的,传入了引用,但您没有修改引用的对象-您正在更改引用本身的值。也就是说,你让它指向一个不同的对象,而实际上没有改变任何对象。
||
\/
1->2->3->4
||
\/
1->2->3->4