Java 何时使用LinkedListNode vs LinkedList

Java 何时使用LinkedListNode vs LinkedList,java,data-structures,linked-list,Java,Data Structures,Linked List,通过破解编码面试,我很难理解这个问题: 编写代码以从未排序的链表中删除重复项 解决方案: public static void deleteDups(LinkedListNode n){ Hashtable table = new Hashtable(); LinkedListNode previous = null; while(n != null ){ if(table.containsKey(n.data)) { prev

通过破解编码面试,我很难理解这个问题:

编写代码以从未排序的链表中删除重复项

解决方案:

 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;
    }
}

我不明白你为什么传入LinkedListNode而不是LinkedList。如果您想从linkedlist中删除DUP,为什么不直接接收并遍历整个列表?

顾名思义,它是一个
linkedlist
,因此如果您有起始节点,您就有了列表
LinkedList
只是不同内存空间中不同节点的链,不要将其视为或期望它像数组一样,数组是一个连续的空间块

这里LinkedListNode是一个类

    public LinkedListNode{
    int data;
    LinkedListNode next;

    public LinkedListNode(int data){
    this.data = data;
    next = null;
    }

    }
    LinkedListNode head = new LinkedListNode(1);
    LinkedListNode node1 = new LinkedListNode(2);
    LinkedListNode node2 = new LinkedListNode(3);
    head.next = node1;
    node1.next  = node2;
    //1->2-3
    deleteDups(head);
这里的
head
节点(data=1)是创建的链表的头部,我们正在传递deleteDups。
在这个函数中,我们使用next迭代给定列表。

假设
n
是列表的头部,没有区别。传递节点而不是整个列表的可能重复允许用户定义一个起点(要开始的节点),而不是执行整个列表。我不知道某个地方是否需要这样做。如果不是,那么就没有什么大的区别。我认为不是重复。另一个考虑因素是,这种重复数据消除器可以在“树或类似树”的情况下使用,在这种情况下,您可能会以某种方式使用递归。然而,这确实是一个相当武断的决定。无论采用哪种方式,都可以正确编写此函数。