算法优解(8)-删除无序单链表中重复出现的节点
2016-11-15 19:42
603 查看
来自左神书中的一道题,在左神核心代码的基础上,添加了链表的构建操作,将这道题完善成了一个小Demo,和各位共勉。
问题:删除无序单链表中重复出现的节点
思路:使用HashSet进行重复判断。
核心算法:
完整源代码:
输出结果:
0->1->2->3->4->1->2->3->4->
0->1->2->3->4->
问题:删除无序单链表中重复出现的节点
思路:使用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->
相关文章推荐
- 链表问题---删除无序单链表中值重复出现的节点
- 删除无序链表中值重复出现的节点
- [算法]删除无序单链表中值重复出现的节点
- 【IT笔试面试题整理】删除无序链表中重复的节点
- 剑指offer系列之55:删除链表汇总重复的节点
- 【链表】删除链表中连续重复的节点
- 删除链表中的重复节点、剩余节点逆序输出
- 从链表中删除重复节点
- Leetcode:Remove Duplicates from Sorted List 删除单链表中重复的节点
- 删除有序链表中的重复节点
- LeetCode 刷题: 删除已排序链表中的重复节点
- 删除链表中重复的节点
- CareerCup之2.1无序链表删除重复元素
- 剑指offer(59):删除链表中重复的节点
- 删除有序链表中的重复节点2
- 华为机试题:删除链表中的重复节点、剩余节点逆序输出
- 删除单向链表中重复的节点
- 删除链表中的重复节点、剩余节点逆序输出
- 删除链表中的重复节点
- LeetCode 82. Remove Duplicates from Sorted List II(删除链表中的重复节点)