This question already has answers here:
Is Java “pass-by-reference” or “pass-by-value”?
(86个答案)
4年前关闭。
在“破解编码面试链接列表”问题中:
编写代码以从未排序的链表中删除重复项,解决方案是
我的问题是,为什么
换句话说,您正在设置一个您记得为“上一个”的值的属性。
而且,正如dimo414已经提到的那样,在此处使用HashTable是一个坏主意。仅凭清晰度就足以使用简单的(Hash-)Set。
(86个答案)
4年前关闭。
在“破解编码面试链接列表”问题中:
编写代码以从未排序的链表中删除重复项,解决方案是
public static void deleteDups (LinkedListNode n){
Hashtable table = new Hashtable();
LinkedListNode previous = null;
while(n!=null){
if(table.containsKey(n.data)){
previous.next = n.next;
} else {
table.put(n.data, true);
previous = n;
}
n = n.next;
}
}
我的问题是,为什么
n = n.next
不更改传递给函数的链表,而做previous.next = n.next
和previous = n
却改变传递的链表? 最佳答案
n
是对LinkedListNode
的引用。通过在此处设置其他值,您无需修改原始的LinkedListNode
,只需将引用从其更改为其他内容即可。换句话说,您“记住”了标签“ n”下的新内容,但没有修改原始的“ n”。
X x = new X();
x = new X(); // this does not modify the original x
previous
是LinkedListNode
,通过设置该LinkedListNode的值OF,可以对其进行修改。X x = new X();
x.y = new Y(); // this does mofiy the original x
换句话说,您正在设置一个您记得为“上一个”的值的属性。
而且,正如dimo414已经提到的那样,在此处使用HashTable是一个坏主意。仅凭清晰度就足以使用简单的(Hash-)Set。
关于java - 链接列表和指针说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32057058/
10-12 22:28