Java 引用和修改链表



我对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到达nullLinkedListNode 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保持对链表前面的引用吗?

LL --> some head node
// invoke method
// LL's value bound to parameter a
a --> some head node
// method executes
a --> head's next
a --> that next's next
...
a --> null
// method exits

LL仍指向原始头节点。

是因为 a 只是指向链表中的节点,而 LL 维护对链表前面的引用?

是的。请尽快阅读此内容。

相关内容

  • 没有找到相关文章

最新更新