题目
给定一个无序单链表的头节点head,删除其中值重复出现的节点。
原链表 | 删除后 |
1->2->3->3->4->2->4->1 | 1->2->3->4 |
要求:
方法一:时间复杂度O(N)
方法二:额外空间复杂度O(1)
思路
方法一:利用哈希表
- 先将头节点加入哈希表中
- 依次遍历链表节点,每次先查看当前节点的值是否在哈希表中,如果在,就跳过当前节点,否则就加入哈希表中
源码
public class Node{
public int value;
public Node next;
public Node(int data){
this.value=data;
}
}
public void removeRep1(Node head){
if(head==null){
return;
}
HashSet<Integer> set=new HashSet<Integer>();
Node pre=head;
Node cur=head.next;
set.add(head.value);
while(cur!=null){
if(set.contains(cur.value)){
pre.next=cur.next;
}else{
set.add(cur.value);
pre=cur;
}
cur=cur.next;
}
}