Question: Write code to remove duplicates from an unsorted linked list. How would you solve this problem if a temporary buffer is not allowed?
package CareerCup;
import java.util.HashSet;
public class DeleteDuplicateLinkedList
{
public DeleteDuplicateLinkedList(){}
public void DeleteDuplicateWithBuffer(LinkedList ll)
{
HashSet<Integer> nodeSet = new HashSet<Integer>();
Node pre = ll.header;
Node temp = ll.header;
while(temp!=null)
{
if(nodeSet.contains(temp.data))
{
if(temp==ll.tail)
{
pre.next = temp.next;
ll.tail = pre;
break;
}
else
{
pre.next = temp.next;
temp = temp.next;
}
}
else
{
nodeSet.add(temp.data);
pre = temp;
temp = temp.next;
}
}
}
public void DeleteDuplicate(LinkedList ll)
{
Node current = ll.header;
Node pre;
Node temp;
while(current!=null)
{
pre = current;
temp = current.next;
while(temp!=null)
{
if(current.data==temp.data)
{
if(temp==ll.tail)
{
pre.next = temp.next;
ll.tail = pre;
break;
}
else
{
pre.next = temp.next;
temp = temp.next;
}
}
else
{
pre = temp;
temp = temp.next;
}
}
current = current.next;
ll.print();
}
}
public static void main(String[] args)
{
int[] data = new int[]{1,1,3,1,3};
LinkedList ll = new LinkedList();
for(int i=0;i<data.length;i++)
ll.add(data[i]);
System.out.println("Before delete the linkedlist:");
ll.print();
DeleteDuplicateLinkedList dl = new DeleteDuplicateLinkedList();
dl.DeleteDuplicate(ll);
// dl.DeleteDuplicateWithBuffer(ll);
System.out.println("After delete the linkedlist:");
ll.print();
}
}