您的位置:首页 > 其它

算法优解(8)-删除无序单链表中重复出现的节点

2016-11-15 19:42 603 查看
来自左神书中的一道题,在左神核心代码的基础上,添加了链表的构建操作,将这道题完善成了一个小Demo,和各位共勉。

问题:删除无序单链表中重复出现的节点

思路:使用HashSet进行重复判断。

核心算法:

public static void removeNode(Node head){
if(head == null){
return;
}

HashSet<Integer> set = new HashSet<Integer>();
Node pre = head;
Node cur = head.next;
set.add(pre.value);
while(cur != null){
if(set.contains(cur.value)){
pre.next = cur.next;
}else{
set.add(cur.value);
pre = cur;
}
cur = cur.next;
}
}


完整源代码:

import java.util.HashSet;

public class RemoveNodeTest {

/**
* 权兴权意-2016.11.15
* 题目:删除无序单链表中重复出现的节点
*/
public static void main(String[] args) {
Node head1 = new Node(0);
Node temp1 = head1;
for(int i = 1;i < 5;i++){
temp1.next = new Node(i);
temp1 = temp1.next;
}
for(int i = 1;i < 5;i++){
temp1.next = new Node(i);
temp1 = temp1.next;
}
printList(head1);
removeNode(head1);
printList(head1);
}

public static void removeNode(Node head){
if(head == null){
return;
}

HashSet<Integer> set = new HashSet<Integer>();
Node pre = head;
Node cur = head.next;
set.add(pre.value);
while(cur != null){
if(set.contains(cur.value)){
pre.next = cur.next;
}else{
set.add(cur.value);
pre = cur;
}
cur = cur.next;
}
}

//打印链表
public static void printList(Node head){
Node temp = head;
while(temp != null){
System.out.print(temp.value + "->");
temp = temp.next;
}
System.out.println();
}

}


输出结果:

0->1->2->3->4->1->2->3->4->

0->1->2->3->4->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: