簡體   English   中英

Java引用和修改鏈表

[英]Java referencing and modifying linked list

我對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遍歷整個列表。 LinkedListNode noDuplicateLL停止不動,一旦a達到null 因此,一旦完成此方法,兩個指針都指向列表中的其他位置,而不是最前面。

下面的方法從頭到尾打印在列表上。

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維護對鏈接列表前面的引用嗎?

是。 閱讀這個只要你能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM