From 4d06c5f6ba8a9563c0eb961ffd066e800edf5afa Mon Sep 17 00:00:00 2001 From: Ranjan Mohanty Date: Tue, 12 Oct 2021 10:49:21 +0530 Subject: [PATCH] Add remove duplicate nodes from a sorted linked list algorithm (#2452) --- .../Lists/RemoveDuplicateNodes.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 DataStructures/Lists/RemoveDuplicateNodes.java diff --git a/DataStructures/Lists/RemoveDuplicateNodes.java b/DataStructures/Lists/RemoveDuplicateNodes.java new file mode 100644 index 000000000..4eb12de29 --- /dev/null +++ b/DataStructures/Lists/RemoveDuplicateNodes.java @@ -0,0 +1,53 @@ +package DataStructures.Lists; + +import DataStructures.Lists.Node; + +public class RemoveDuplicateNodes { + + public Node deleteDuplicates(Node head) { + // sentinel + Node sentinel = new Node(0, head); + + // predecessor = the last node + // before the sublist of duplicates + Node pred = sentinel; + + while (head != null) { + // if it's a beginning of duplicates sublist + // skip all duplicates + if (head.next != null && head.value == head.next.value) { + // move till the end of duplicates sublist + while (head.next != null && head.value == head.next.value) { + head = head.next; + } + // skip all duplicates + pred.next = head.next; + // otherwise, move predecessor + } else { + pred = pred.next; + } + + // move forward + head = head.next; + } + return sentinel.next; + } + + public void print(Node head) { + Node temp = head; + while (temp != null && temp.next != null) { + System.out.print(temp.value + "->"); + temp = temp.next; + } + if (temp != null) { + System.out.print(temp.value); + } + } + + public static void main(String arg[]) { + RemoveDuplicateNodes instance = new RemoveDuplicateNodes(); + Node head = new Node(0, new Node(2, new Node(3, new Node(3, new Node(4))))); + head = instance.deleteDuplicates(head); + instance.print(head); + } +} \ No newline at end of file