HackerRank Insert a Node at the Tail of a Linked List solution YASH PAL, 31 July 2024 In this HackerRank Insert a Node at the Tail of a Linked List problem we need to develop a program in which if we have given a head node pointer of a linked list and the value that we need to add to the list. so we need to create a new node and assign that value to the node and then we need to insert that node at the last of the linked list and then return the head node of that linked list. If the given head node pointer is null that means the linked list is empty. Problem solution in Python programming. #!/bin/python3 import math import os import random import re import sys class SinglyLinkedListNode: def __init__(self, node_data): self.data = node_data self.next = None class SinglyLinkedList: def __init__(self): self.head = None def print_singly_linked_list(node, sep, fptr): while node: fptr.write(str(node.data)) node = node.next if node: fptr.write(sep) def insertNodeAtTail(head, data): cur = head if head == None: return SinglyLinkedListNode(data) while cur.next != None: cur = cur.next cur.next = SinglyLinkedListNode(data) return head if __name__ == '__main__': fptr = open(os.environ['OUTPUT_PATH'], 'w') llist_count = int(input()) llist = SinglyLinkedList() for i in range(llist_count): llist_item = int(input()) llist_head = insertNodeAtTail(llist.head, llist_item) llist.head = llist_head print_singly_linked_list(llist.head, 'n', fptr) fptr.write('n') fptr.close() Problem solution in Java Programming. 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); } } } static SinglyLinkedListNode insertNodeAtTail(SinglyLinkedListNode head, int data) { SinglyLinkedListNode temp = head; if(temp == null){ head = new SinglyLinkedListNode(data); return head; } while(temp.next != null){ temp = temp.next; } temp.next = new SinglyLinkedListNode(data); 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("(rn|[nru2028u2029u0085])?"); for (int i = 0; i < llistCount; i++) { int llistItem = scanner.nextInt(); scanner.skip("(rn|[nru2028u2029u0085])?"); SinglyLinkedListNode llist_head = insertNodeAtTail(llist.head, llistItem); llist.head = llist_head; } printSinglyLinkedList(llist.head, "n", bufferedWriter); bufferedWriter.newLine(); bufferedWriter.close(); scanner.close(); } } Problem solution in C++ programming. #include <bits/stdc++.h> using namespace std; class SinglyLinkedListNode { public: int data; SinglyLinkedListNode *next; SinglyLinkedListNode(int node_data) { this->data = node_data; this->next = nullptr; } }; class SinglyLinkedList { public: SinglyLinkedListNode *head; SinglyLinkedList() { this->head = nullptr; } }; void print_singly_linked_list(SinglyLinkedListNode* node, string sep, ofstream& fout) { while (node) { fout << node->data; node = node->next; if (node) { fout << sep; } } } void free_singly_linked_list(SinglyLinkedListNode* node) { while (node) { SinglyLinkedListNode* temp = node; node = node->next; free(temp); } } SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) { SinglyLinkedListNode *n = new SinglyLinkedListNode(data); if(head==NULL){ return head=n; } else{ SinglyLinkedListNode *rhead = head; while(head->next !=NULL){ head=head->next; } head->next = n; return rhead; } } int main() { ofstream fout(getenv("OUTPUT_PATH")); SinglyLinkedList* llist = new SinglyLinkedList(); int llist_count; cin >> llist_count; cin.ignore(numeric_limits<streamsize>::max(), 'n'); for (int i = 0; i < llist_count; i++) { int llist_item; cin >> llist_item; cin.ignore(numeric_limits<streamsize>::max(), 'n'); SinglyLinkedListNode* llist_head = insertNodeAtTail(llist->head, llist_item); llist->head = llist_head; } print_singly_linked_list(llist->head, "n", fout); fout << "n"; free_singly_linked_list(llist->head); fout.close(); return 0; } Problem solution in C programming. #include <assert.h> #include <limits.h> #include <math.h> #include <stdbool.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> char* readline(); typedef struct SinglyLinkedListNode SinglyLinkedListNode; typedef struct SinglyLinkedList SinglyLinkedList; struct SinglyLinkedListNode { int data; SinglyLinkedListNode* next; }; struct SinglyLinkedList { SinglyLinkedListNode* head; }; SinglyLinkedListNode* create_singly_linked_list_node(int node_data) { SinglyLinkedListNode* node = malloc(sizeof(SinglyLinkedListNode)); node->data = node_data; node->next = NULL; return node; } void print_singly_linked_list(SinglyLinkedListNode* node, char* sep, FILE* fptr) { while (node) { fprintf(fptr, "%d", node->data); node = node->next; if (node) { fprintf(fptr, "%s", sep); } } } void free_singly_linked_list(SinglyLinkedListNode* node) { while (node) { SinglyLinkedListNode* temp = node; node = node->next; free(temp); } } SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) { if (head == NULL) { return create_singly_linked_list_node(data); } SinglyLinkedListNode *node = head; while (node->next != NULL) { node = node->next; } node->next = create_singly_linked_list_node(data); return head; } int main() { FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w"); SinglyLinkedList* llist = malloc(sizeof(SinglyLinkedList)); llist->head = NULL; char* llist_count_endptr; char* llist_count_str = readline(); int llist_count = strtol(llist_count_str, &llist_count_endptr, 10); if (llist_count_endptr == llist_count_str || *llist_count_endptr != ' ') { exit(EXIT_FAILURE); } for (int i = 0; i < llist_count; i++) { char* llist_item_endptr; char* llist_item_str = readline(); int llist_item = strtol(llist_item_str, &llist_item_endptr, 10); if (llist_item_endptr == llist_item_str || *llist_item_endptr != ' ') { exit(EXIT_FAILURE); } SinglyLinkedListNode* llist_head = insertNodeAtTail(llist->head, llist_item); llist->head = llist_head; } char *sep = "n"; print_singly_linked_list(llist->head, sep, fptr); fprintf(fptr, "n"); free_singly_linked_list(llist->head); fclose(fptr); return 0; } char* readline() { size_t alloc_length = 1024; size_t data_length = 0; char* data = malloc(alloc_length); while (true) { char* cursor = data + data_length; char* line = fgets(cursor, alloc_length - data_length, stdin); if (!line) { break; } data_length += strlen(cursor); if (data_length < alloc_length - 1 || data[data_length - 1] == 'n') { break; } alloc_length <<= 1; data = realloc(data, alloc_length); if (!line) { break; } } if (data[data_length - 1] == 'n') { data[data_length - 1] = ' '; data = realloc(data, data_length); } else { data = realloc(data, data_length + 1); data[data_length] = ' '; } return data; } coding problems data structure