说我得到了一个带定义的链表(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
吗?
我尝试将此解决方案提交给在线评委,但它没有做任何事情。帮助
答案 0 :(得分:1)
Java参数为passed by value
。
当您致电remove
时,会传递node
引用的副本。您的代码会尝试通过设置node = node.next()
在本地更改此引用,但这不会成功影响原始列表。
remove
方法需要做的是在列表中找到具有next
的节点,该节点引用您要删除的节点,并将其更改为指向节点后的节点你想删除。假设有一种方法可以找到名为findParentOf()
的给定节点的父节点:
ListNode parentNode = findParentOf(nodeToRemove);
parentNode.next = nodeToRemove.next;
答案 1 :(得分:0)
public void remove (ListNode node){
node = node.next;
}
这只会影响您当前持有的本地参考。要删除节点,您必须操纵其前任的next
变量,该变量不可用,因为它是单链接列表。
理论上你所能做的就是:
public void removeNext (ListNode node) {
node.next = node.next.next;
}
在样本列表上调用此方法时,您必须分别使用值为2的节点。
答案 2 :(得分:0)
public void remove (ListNode node){
node = node.next;
}
它没有做任何事情,因为当本地引用变量node
设置为node.next
时,它会从指向val为3的节点转到val为4的节点。
||
\/
1->2->3->4
变为
||
\/
1->2->3->4