From d7dad598394f17f406ac2fbb36a464cbc3502148 Mon Sep 17 00:00:00 2001 From: anebz Date: Mon, 12 Aug 2019 20:26:38 +0200 Subject: [PATCH] linked list hackerrank exercises --- 02. Linked lists/delete_node.java | 102 ++++++++++++++++ 02. Linked lists/get_kth_node_value.java | 112 ++++++++++++++++++ .../hackerrank/insert_node_at_head.java | 85 +++++++++++++ .../hackerrank/insert_node_at_tail.java | 90 ++++++++++++++ 4 files changed, 389 insertions(+) create mode 100644 02. Linked lists/delete_node.java create mode 100644 02. Linked lists/get_kth_node_value.java create mode 100644 02. Linked lists/hackerrank/insert_node_at_head.java create mode 100644 02. Linked lists/hackerrank/insert_node_at_tail.java diff --git a/02. Linked lists/delete_node.java b/02. Linked lists/delete_node.java new file mode 100644 index 0000000..c78dfb6 --- /dev/null +++ b/02. Linked lists/delete_node.java @@ -0,0 +1,102 @@ +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 deleteNode function below. + + /* + * For your reference: + * + * SinglyLinkedListNode { int data; SinglyLinkedListNode next; } + * + */ + static SinglyLinkedListNode deleteNode(SinglyLinkedListNode head, int position) { + + if (position == 0) { + return head.next; + } + head.next = deleteNode(head.next, position - 1); + return head; + } + + 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"))); + + 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); + } + + int position = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + SinglyLinkedListNode llist1 = deleteNode(llist.head, position); + + printSinglyLinkedList(llist1, " ", bufferedWriter); + bufferedWriter.newLine(); + + bufferedWriter.close(); + + scanner.close(); + } +} diff --git a/02. Linked lists/get_kth_node_value.java b/02. Linked lists/get_kth_node_value.java new file mode 100644 index 0000000..151b7cd --- /dev/null +++ b/02. Linked lists/get_kth_node_value.java @@ -0,0 +1,112 @@ +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 getNode function below. + + /* + * For your reference: + * + * SinglyLinkedListNode { int data; SinglyLinkedListNode next; } + * + */ + static int getNode(SinglyLinkedListNode head, int positionFromTail) { + + SinglyLinkedListNode current = head; + SinglyLinkedListNode faster = head; + while (positionFromTail-- > 0) { + faster = faster.next; + } + while (faster.next != null) { + faster = faster.next; + current = current.next; + } + return current.data; + } + + 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 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); + } + + int position = scanner.nextInt(); + scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); + + int result = getNode(llist.head, position); + + bufferedWriter.write(String.valueOf(result)); + bufferedWriter.newLine(); + } + + bufferedWriter.close(); + + scanner.close(); + } +} diff --git a/02. Linked lists/hackerrank/insert_node_at_head.java b/02. Linked lists/hackerrank/insert_node_at_head.java new file mode 100644 index 0000000..043d1c3 --- /dev/null +++ b/02. Linked lists/hackerrank/insert_node_at_head.java @@ -0,0 +1,85 @@ +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 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 insertNodeAtHead function below. + + /* + * For your reference: + * + * SinglyLinkedListNode { int data; SinglyLinkedListNode next; } + * + */ + static SinglyLinkedListNode insertNodeAtHead(SinglyLinkedListNode llist, int data) { + + SinglyLinkedListNode new_node = new SinglyLinkedListNode(data); + new_node.next = llist; + return new_node; + } + + 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"))); + + 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])?"); + + SinglyLinkedListNode llist_head = insertNodeAtHead(llist.head, llistItem); + llist.head = llist_head; + } + + printSinglyLinkedList(llist.head, "\n", bufferedWriter); + bufferedWriter.newLine(); + + bufferedWriter.close(); + + scanner.close(); + } +} diff --git a/02. Linked lists/hackerrank/insert_node_at_tail.java b/02. Linked lists/hackerrank/insert_node_at_tail.java new file mode 100644 index 0000000..4ef2654 --- /dev/null +++ b/02. Linked lists/hackerrank/insert_node_at_tail.java @@ -0,0 +1,90 @@ +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 SinglyLinkedList() { + this.head = null; + } + + } + + 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 insertNodeAtTail function below. + + /* + * For your reference: + * + * SinglyLinkedListNode { int data; SinglyLinkedListNode next; } + * + */ + static SinglyLinkedListNode insertNodeAtTail(SinglyLinkedListNode head, int data) { + + SinglyLinkedListNode new_node = new SinglyLinkedListNode(data); + SinglyLinkedListNode head_copy = head; + if (head == null) { + return new_node; + } + while (head.next != null) { + head = head.next; + } + head.next = new_node; + 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"))); + + 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])?"); + + SinglyLinkedListNode llist_head = insertNodeAtHead(llist.head, llistItem); + llist.head = llist_head; + } + + printSinglyLinkedList(llist.head, "\n", bufferedWriter); + bufferedWriter.newLine(); + + bufferedWriter.close(); + + scanner.close(); + } +} \ No newline at end of file