【发布时间】:2014-07-27 21:53:43
【问题描述】:
我对 Java 有点陌生,目前有一件事让我在引用方面有点困扰。
我有一个返回void 的方法。我将一个链表传递给这个方法。还有另一个名为noDuplicateLL 的链表变量引用了同一个链表。 noDuplicateLL 跳过链表中的节点。
代码:
public static void removeDuplicate(LinkedListNode a) {
LinkedListNode noDuplicateLL = null;
if (a == null) {
//return null;
} else {
HashMap<Integer, Boolean> duplicateCheck = new HashMap<Integer, Boolean>();
while (a != null) {
// check in hashtable O(1)
if (duplicateCheck.containsKey(a.data)) {
noDuplicateLL.next = a.next;
} else {
noDuplicateLL = a;
duplicateCheck.put(a.data, true);
}
// update
a = a.next;
}
}
}
LinkedListNode a 遍历整个列表。一旦a 到达null,LinkedListNode noDuplicateLL 就会停止移动。所以一旦这个方法完成,两个指针都指向列表中的其他地方,而不是前面。
下面的方法从头到尾打印在列表上。
public static void printLinkedList(LinkedListNode head) {
while (head != null) {
System.out.println(head.data);
head = head.next;
}
}
我的主要:
LinkedListNode LL = LinkedList.randomLinkedList(nodeVal);
removeDuplicate(LL);
printLinkedList(LL);
当 LL 作为a 传递给方法时,为什么输出仍然从头到尾打印?是不是因为a只是指向链表中的节点,而LL保持对链表前面的引用?
【问题讨论】:
标签: java linked-list