【发布时间】:2013-07-12 16:48:57
【问题描述】:
import java.util.*;
/*
* Remove duplicates from an unsorted linked list
*/
public class LinkedListNode {
public int data;
public LinkedListNode next;
public LinkedListNode(int data) {
this.data = data;
}
}
public class Task {
public static void deleteDups(LinkedListNode head){
Hashtable<Integer, Boolean> table=new Hashtable<Integer, Boolean>();
LinkedListNode previous=null;
//nth node is not null
while(head!=null){
//have duplicate
if(table.containsKey(head.data)){
//skip duplicate
previous.next=head.next;
}else{
//put the element into hashtable
table.put(head.data,true);
//move to the next element
previous=head;
}
//iterate
head=head.next;
}
}
public static void main (String args[]){
LinkedList<Integer> list=new LinkedList<Integer>();
list.addLast(1);
list.addLast(2);
list.addLast(3);
list.addLast(3);
list.addLast(3);
list.addLast(4);
list.addLast(4);
System.out.println(list);
LinkedListNode head=new LinkedListNode(list.getFirst());
Task.deleteDups(head);
System.out.println(list);
}
}
结果:[1, 2, 3, 3, 3, 4, 4] [1、2、3、3、3、4、4]
它不会消除重复。
为什么方法不起作用?
【问题讨论】:
-
您根本没有从
deleteDups方法返回新列表。 -
我建议您使用 IDE 中的调试器来单步调试代码并理解它。如果您不知道如何使用它,那么学习永远不会太晚。我也不会使用 Hashtable,因为它是过去 15 年左右的遗留类。您应该使用像 HashSet 这样的集合。
-
您的列表未连接。您只是在添加节点,但您的函数将立即返回,因为每个元素都没有设置“下一个”指针
标签: java duplicates singly-linked-list