diff --git a/02. Linked lists/hackerrank/delete_duplicate_nodes.java b/02. Linked lists/hackerrank/delete_duplicate_nodes.java new file mode 100644 index 0000000..7cc789a --- /dev/null +++ b/02. Linked lists/hackerrank/delete_duplicate_nodes.java @@ -0,0 +1,106 @@ +import java.io.*; +import java.math.*; +import java.security.*; +import java.text.*; +import java.util.*; +import java.util.concurrent.*; +import java.util.regex.*; + +public class Solution { + + static class SinglyLinkedListNode { + public int data; + public SinglyLinkedListNode next; + + public SinglyLinkedListNode(int nodeData) { + this.data = nodeData; + this.next = null; + } + } + + static class SinglyLinkedList { + public SinglyLinkedListNode head; + public SinglyLinkedListNode tail; + + public SinglyLinkedList() { + this.head = null; + this.tail = null; + } + + public void insertNode(int nodeData) { + SinglyLinkedListNode node = new SinglyLinkedListNode(nodeData); + + if (this.head == null) { + this.head = node; + } else { + this.tail.next = node; + } + + this.tail = node; + } + } + + public static void printSinglyLinkedList(SinglyLinkedListNode node, String sep, BufferedWriter bufferedWriter) + throws IOException { + while (node != null) { + bufferedWriter.write(String.valueOf(node.data)); + + node = node.next; + + if (node != null) { + bufferedWriter.write(sep); + } + } + } + + // Complete the removeDuplicates function below. + + /* + * For your reference: + * + * SinglyLinkedListNode { int data; SinglyLinkedListNode next; } + * + */ + static SinglyLinkedListNode removeDuplicates(SinglyLinkedListNode head) { + SinglyLinkedListNode head_copy = head; + while (head.next != null) { + if (head.data == head.next.data) { + if (head.next.next == null) head.next = null; + elsehead.next = head.next.next; + } else head = head.next; + } + return head_copy; + } + + private static final Scanner scanner = new Scanner(System.in); + + public static void main(String[] args) throws IOException { + BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH"))); + + int t = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + for (int tItr = 0; tItr < t; tItr++) { + SinglyLinkedList llist = new SinglyLinkedList(); + + int llistCount = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + for (int i = 0; i < llistCount; i++) { + int llistItem = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + llist.insertNode(llistItem); + } + + SinglyLinkedListNode llist1 = removeDuplicates(llist.head); + + printSinglyLinkedList(llist1, " ", bufferedWriter); + bufferedWriter.newLine(); + } + + bufferedWriter.close(); + + scanner.close(); + } +} diff --git a/02. Linked lists/hackerrank/merge_sorted_lists.java b/02. Linked lists/hackerrank/merge_sorted_lists.java new file mode 100644 index 0000000..62a3321 --- /dev/null +++ b/02. Linked lists/hackerrank/merge_sorted_lists.java @@ -0,0 +1,122 @@ +import java.io.*; +import java.math.*; +import java.security.*; +import java.text.*; +import java.util.*; +import java.util.concurrent.*; +import java.util.regex.*; + +public class Solution { + + static class SinglyLinkedListNode { + public int data; + public SinglyLinkedListNode next; + + public SinglyLinkedListNode(int nodeData) { + this.data = nodeData; + this.next = null; + } + } + + static class SinglyLinkedList { + public SinglyLinkedListNode head; + public SinglyLinkedListNode tail; + + public SinglyLinkedList() { + this.head = null; + this.tail = null; + } + + public void insertNode(int nodeData) { + SinglyLinkedListNode node = new SinglyLinkedListNode(nodeData); + + if (this.head == null) { + this.head = node; + } else { + this.tail.next = node; + } + + this.tail = node; + } + } + + public static void printSinglyLinkedList(SinglyLinkedListNode node, String sep, BufferedWriter bufferedWriter) + throws IOException { + while (node != null) { + bufferedWriter.write(String.valueOf(node.data)); + + node = node.next; + + if (node != null) { + bufferedWriter.write(sep); + } + } + } + + // Complete the mergeLists function below. + + /* + * For your reference: + * + * SinglyLinkedListNode { int data; SinglyLinkedListNode next; } + * + */ + static SinglyLinkedListNode mergeLists(SinglyLinkedListNode head1, SinglyLinkedListNode head2) { + if (head1 == null) + return head2; + else if (head2 == null) + return head1; + + if (head1.data < head2.data) { + head1.next = mergeLists(head1.next, head2); + return head1; + } else { + head2.next = mergeLists(head1, head2.next); + return head2; + } + } + + private static final Scanner scanner = new Scanner(System.in); + + public static void main(String[] args) throws IOException { + BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH"))); + + int tests = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + for (int testsItr = 0; testsItr < tests; testsItr++) { + SinglyLinkedList llist1 = new SinglyLinkedList(); + + int llist1Count = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + for (int i = 0; i < llist1Count; i++) { + int llist1Item = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + llist1.insertNode(llist1Item); + } + + SinglyLinkedList llist2 = new SinglyLinkedList(); + + int llist2Count = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + for (int i = 0; i < llist2Count; i++) { + int llist2Item = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + llist2.insertNode(llist2Item); + } + + SinglyLinkedListNode llist3 = mergeLists(llist1.head, llist2.head); + + printSinglyLinkedList(llist3, " ", bufferedWriter); + bufferedWriter.newLine(); + } + + bufferedWriter.close(); + + scanner.close(); + } +}