Write code to remove duplicates from an unsorted linked listFOLLOW UP
How would you solve this problem if a temporary buffer is not allowed?
Analysis:
If extra space allowed, use hash table as buffer to detect duplicate node value O(n).
If extra space not allowed, use nested loops, compare all the node pairs O(n^2).
public class Answer {
public static void solution(LinkedListNode head){
LinkedListNode previous = null;
Hashtable table = new Hashtable();
while(head.next != null){
if(table.containsKey(head.data)) previous.next = head.next;
else{
previous = head;
table.put(head.data, true);
}
head = head.next;
}
}
public static void solution2(LinkedListNode head){
while(head.next!=null){
LinkedListNode pointer = head;
while (pointer.next != null) {
if (head.data == pointer.next.data) {
pointer.next = pointer.next.next;
}
else pointer = pointer.next;
}
head = head.next;
}
}
public static void main(String[] args) {
LinkedListNode head = AssortedMethods.randomLinkedList(10, 0, 10);
System.out.println(head.printForward());
solution2(head);
System.out.println(head.printForward());
}
}