Write code to remove duplicates from an unsorted linked list.
FOLLOW UP
How would you solve this problem if a temporary buffer is not allowed?
soln: 还有就是快指针慢指针,不说了
package test;
import java.util.Scanner;
import java.util.HashSet;
public class JumpTwo {
static class Node {
char data;
Node next = null;
Node(char a) {
this.data = a;
}
}
public static void main(String[] args) {
Egg egg = new Egg();
Scanner input = new Scanner(System.in);
StringBuffer sb = new StringBuffer(input.nextLine());
String s = sb.toString();
char[] chars = s.toCharArray();
Node p = new Node('1');
Node head = p;
for (char c : chars) {
p.next = new Node(c);
p = p.next;
}
head = head.next;
removeDup(head);
while (null != head){
System.out.println(head.data);
head = head.next;
}
}
private static void removeDup(Node head) {
HashSet<Character> elem = new HashSet<Character>();
Node cur = head.next;
Node pre = head;
elem.add(head.data);
while (cur != null) {
if (elem.contains(cur.data)) {
pre.next = cur.next;
cur = null;
cur = pre.next;
} else {
elem.add(cur.data);
pre = cur;
cur = cur.next;
}
}
}
}