我无法通过破解编码面试来理解这个问题:
编写代码以从未排序的链接列表中删除重复项
解决方案:
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。如果你想删除链表中的重复项,为什么你不能接受并遍历整个列表呢?
答案 0 :(得分:3)
正如名称所示的那样LinkedList
,所以如果你有起始节点,那么就有了这个列表。 LinkedList
仅仅是不同内存空间中不同节点的链,不要对待或期望它像数组一样,这是一个连续的空间块。
答案 1 :(得分:2)
这里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
node(data = 1)是我们在deleteDups中传递的已创建链表的头部。
在这个函数中,我们使用next迭代遍历给定列表。