如何从链表中删除重复数据

package java程序员面试笔试宝典;


import java.util.Hashtable;
import java.util.Map.Entry;


public class 题8_1_2如何从链表中删除重复数据 {
public static void main(String[] args) {
题8_1链表基本操作 list=new 题8_1链表基本操作();
list.addNode(5);
list.addNode(5);
list.addNode(5);
list.addNode(1);
list.addNode(2);
list.addNode(5);
list.addNode(8);
list.addNode(1);
list.addNode(5);
list.addNode(8);
list.addNode(5);
list.addNode(1);
list.printList();
deleteDuplecate1(list.head);
System.out.println();
list.printList();
}
//双重遍历法
public static void deleteDuplecate1(Node head){
Node cur=head;
Node pre=cur;
while(cur!=null){
while(pre!=null&&pre.next!=null){
if(pre.next.data==cur.data){
pre.next=pre.next.next;
}else {
pre=pre.next;
}
}
cur=cur.next;
pre=cur;
}
}
//双重遍历法

public static void deleteDuplecate0(Node head){
Node cur=head;
Node pre=head;
Node next=cur.next;
while(cur.next!=null){
while(next!=null){
if(next.data==cur.data){
pre.next=next.next;
next=pre.next;
}else{
pre=pre.next;
next=next.next;
}
}
cur=cur.next;
pre=cur;
if(pre!=null&&pre.next!=null){
next=pre.next;
}else {
break;
}
}
}
//hashtable法
public static void deleteDuplecate(Node head){
Hashtable<Integer, Integer> table =new Hashtable<Integer, Integer>();
if(head==null){
return ;
}
Node p=head;
table.put(head.data, 1);
while(p.next!=null){
if(table.containsKey(p.next.data)){
p.next=p.next.next;
}else {
table.put(p.next.data, 1);
p=p.next;
}
if(p==null||p.next==null){
break;
}
}
}
}

猜你喜欢

转载自blog.csdn.net/m0_38068868/article/details/80286842
今日推荐