【问题标题】:Java referencing and modifying linked listJava引用和修改链表
【发布时间】: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 到达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保持对链表前面的引用?

【问题讨论】:

    标签: java linked-list


    【解决方案1】:
    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 维护对链表前面的引用?

    是的。尽快阅读this

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 2012-04-02
      • 2018-07-26
      • 2012-10-14
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多