完成我的待办事项之后
我知道解决方法如下
public void deleteNode(Node node) {
node.data = (node.next).data;
node.next = (node.next).next;
System.gc();
}
但是我的问题是
以上解决方案与下一个解决方案有何不同
两者都是有效的解决方案,是否具有相同的功能
public void deleteNode(Node node) {
node = (node.next);
System.gc();
}
答案 0 :(得分:1)
这样做的时候
node = (node.next);
您更改参数,但不更改任何数据。
Java使用按值调用方法(很难理解按值传递引用的含义)。
这是个小例子:
void foo(int i) {
i = 2;
System.out.println(i);
}
我们称之为
int j = 1;
foo(j);
System.out.println(j);
我们在控制台上获得了2
和1
。
这意味着在调用foo
时传递给它的值的副本。
PS:
您不需要致电System.gc();
。
答案 1 :(得分:0)
感谢@talex
我将案件可视化为更清晰的
让我们假设要从链接列表中删除以下node c
的问题
而且我们只能访问该节点
第一个解决方案实际上将删除节点
public void deleteNode(Node node) {
node.data = (node.next).data;
node.next = (node.next).next;
System.gc();
}
通过将下一个单元格(值和指针)复制到参数单元格
所以最终结果
参数单元格将被视为已删除,并且链接列表将正确链接
提示:
node d
不会被任何指针GC
清除第二个解决方案不会删除节点
public void deleteNode(Node node) {
node = (node.next);
System.gc();
}