//Followup //method: keep 2 pointers (runner's tech) static void removeDupe2(SingleLinkNode head) { SingleLinkNode p1 = head; SingleLinkNode p2; while (p1 != null) { p2 = p1; while (p2.next != null) { if (p2.next.data == p1.data) { p2.next = p2.next.next; } p2 = p2.next; } p1 = p1.next; } }
//method: using a hash table static void removeDupe(SingleLinkNode head) { SingleLinkNode n = head; SingleLinkNode prev = null; HashSet<int> checker = new HashSet<int>(); while (n != null) { if (checker.Contains(n.data)) { prev.next = n.next; } else { checker.Add(n.data); prev = n; } n = n.next; } }
//method: using a hash table static void removeDupe(SingleLinkNode head) { SingleLinkNode n = head; SingleLinkNode prev = null; HashSet <int> checker = new HashSet <int>(); while (n != null) { if (checker.Contains(n.data)) { prev.next = n.next; } else { checker.Add(n.data); prev = n; } n = n.next; } }