Skip to content
Programming101
Programming101

Learn everything about programming

  • Home
  • CS Subjects
    • IoT – Internet of Things
    • Digital Communication
    • Human Values
  • Programming Tutorials
    • C Programming
    • Data structures and Algorithms
    • 100+ Java Programs
    • 100+ C Programs
  • HackerRank Solutions
    • HackerRank Algorithms Solutions
    • HackerRank C problems solutions
    • HackerRank C++ problems solutions
    • HackerRank Java problems solutions
    • HackerRank Python problems solutions
Programming101
Programming101

Learn everything about programming

Hackerrank Delete duplicate-value nodes from a sorted linked list solution

YASH PAL, 31 July 2024

In this HackerRank Delete duplicate-value nodes from a sorted linked list problem, have given pointers of the head of a sorted linked list, where the values in the nodes are ascending order. then we need to delete the nodes that have duplicate values and return the sorted list with each distinct value in the list. and if the given pointer is null then the list is empty.

Hackerrank Delete duplicate-value nodes from a sorted linked list solution

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
self.tail = None

def insert_node(self, node_data):
node = SinglyLinkedListNode(node_data)

if not self.head:
self.head = node
else:
self.tail.next = node

self.tail = node

def print_singly_linked_list(node, sep, fptr):
while node:
fptr.write(str(node.data))

node = node.next

if node:
fptr.write(sep)

def removeDuplicates(head):
ans=None
s=set()
ansl=SinglyLinkedList()
while head:
if head.data not in s:
s.add(head.data)
ansl.insert_node(head.data)
head=head.next
else:
head=head.next
return ansl.head

if __name__ == ‘__main__’:
fptr = open(os.environ[‘OUTPUT_PATH’], ‘w’)

t = int(input())

for t_itr in range(t):
llist_count = int(input())

llist = SinglyLinkedList()

for _ in range(llist_count):
llist_item = int(input())
llist.insert_node(llist_item)

llist1 = removeDuplicates(llist.head)

print_singly_linked_list(llist1, ‘ ‘, 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 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);
}
}
}

public static SinglyLinkedListNode removeDuplicates(SinglyLinkedListNode llist) {
// Write your code here
SinglyLinkedListNode temp = llist;

while(temp.next!=null)
{
if(temp.data == temp.next.data)
{

temp.next = temp.next.next;
}
else
{
temp = temp.next;
}
}
return llist;
}
class Result {

}

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(“(rn|[nru2028u2029u0085])?”);

for (int tItr = 0; tItr < t; tItr++) {
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])?”);

llist.insertNode(llistItem);
}

SinglyLinkedListNode llist1 = removeDuplicates(llist.head);

printSinglyLinkedList(llist1, ” “, 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;
        SinglyLinkedListNode *tail;

        SinglyLinkedList() {
            this->head = nullptr;
            this->tail = nullptr;
        }

        void insert_node(int node_data) {
            SinglyLinkedListNode* node = new SinglyLinkedListNode(node_data);

            if (!this->head) {
                this->head = node;
            } else {
                this->tail->next = node;
            }

            this->tail = node;
        }
};

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* removeDuplicates(SinglyLinkedListNode* llist) {
SinglyLinkedListNode *curr = llist;
    while (curr != NULL) {
        SinglyLinkedListNode *next = curr->next;
        while (next != NULL && next->data == curr->data)
            next = next->next;
        curr->next = next;
        curr = next;
        if (next != NULL) next = next->next;
    }
    return llist;
}


int main()
{
    ofstream fout(getenv("OUTPUT_PATH"));

    int t;
    cin >> t;
    cin.ignore(numeric_limits<streamsize>::max(), 'n');

    for (int t_itr = 0; t_itr < t; t_itr++) {
        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');

            llist->insert_node(llist_item);
        }

        SinglyLinkedListNode* llist1 = removeDuplicates(llist->head);

        print_singly_linked_list(llist1, " ", fout);
        fout << "n";

        free_singly_linked_list(llist1);
    }

    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* tail;
};

SinglyLinkedListNode* create_singly_linked_list_node(int node_data) {
    SinglyLinkedListNode* node = malloc(sizeof(SinglyLinkedListNode));

    node->data = node_data;
    node->next = NULL;

    return node;
}

void insert_node_into_singly_linked_list(SinglyLinkedList** singly_linked_list, int node_data) {
    SinglyLinkedListNode* node = create_singly_linked_list_node(node_data);

    if (!(*singly_linked_list)->head) {
        (*singly_linked_list)->head = node;
    } else {
        (*singly_linked_list)->tail->next = node;
    }

    (*singly_linked_list)->tail = 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* removeDuplicates(SinglyLinkedListNode* head) {
    if(head == NULL) return head;
    SinglyLinkedListNode* currBoi = head;
    SinglyLinkedListNode* nextBoi = currBoi->next;
    
    while(nextBoi != NULL){
        if(currBoi->data == nextBoi->data){
            SinglyLinkedListNode* temp = nextBoi;
            nextBoi = nextBoi->next;
            currBoi->next = nextBoi;
            temp->next = NULL;
            free(temp);
        } else {
            currBoi = currBoi->next;
            nextBoi = nextBoi->next;
        }
    }
    return head;
}

int main()
{
    FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");

    char* t_endptr;
    char* t_str = readline();
    int t = strtol(t_str, &t_endptr, 10);

    if (t_endptr == t_str || *t_endptr != '') { exit(EXIT_FAILURE); }

    for (int t_itr = 0; t_itr < t; t_itr++) {
        SinglyLinkedList* llist = malloc(sizeof(SinglyLinkedList));
        llist->head = NULL;
        llist->tail = 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); }

            insert_node_into_singly_linked_list(&llist, llist_item);
        }

        SinglyLinkedListNode* llist1 = removeDuplicates(llist->head);

        char *sep = " ";

        print_singly_linked_list(llist1, sep, fptr);
        fprintf(fptr, "n");

        free_singly_linked_list(llist1);
    }

    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; }

        size_t new_length = alloc_length << 1;
        data = realloc(data, new_length);

        if (!data) { break; }

        alloc_length = new_length;
    }

    if (data[data_length - 1] == 'n') {
        data[data_length - 1] = '';
    }

    data = realloc(data, data_length);

    return data;
}

Problem solution in JavaScript programming.

‘use strict’;

const fs = require(‘fs’);

process.stdin.resume();
process.stdin.setEncoding(‘utf-8’);

let inputString = ”;
let currentLine = 0;

process.stdin.on(‘data’, inputStdin => {
inputString += inputStdin;
});

process.stdin.on(‘end’, _ => {
inputString = inputString.replace(/s*$/, ”)
.split(‘n’)
.map(str => str.replace(/s*$/, ”));

main();
});

function readLine() {
return inputString[currentLine++];
}

const SinglyLinkedListNode = class {
constructor(nodeData) {
this.data = nodeData;
this.next = null;
}
};

const SinglyLinkedList = class {
constructor() {
this.head = null;
this.tail = null;
}

insertNode(nodeData) {
const node = new SinglyLinkedListNode(nodeData);

if (this.head == null) {
this.head = node;
} else {
this.tail.next = node;
}

this.tail = node;
}
};

function printSinglyLinkedList(node, sep, ws) {
while (node != null) {
ws.write(String(node.data));

node = node.next;

if (node != null) {
ws.write(sep);
}
}
}

function removeDuplicates(head) {
if (!head) return head;
var node = head;
while (node) {
if (node.next && node.data === node.next.data) {
node.next = node.next.next;
} else {
node = node.next;
}
}
return head;
}

function main() {
const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

const t = parseInt(readLine(), 10);

for (let tItr = 0; tItr < t; tItr++) {
const llistCount = parseInt(readLine(), 10);

let llist = new SinglyLinkedList();

for (let i = 0; i < llistCount; i++) {
const llistItem = parseInt(readLine(), 10);
llist.insertNode(llistItem);
}

let llist1 = removeDuplicates(llist.head);

printSinglyLinkedList(llist1, ” “, ws)
ws.write(“n”);
}

ws.end();
} 

coding problems data structure

Post navigation

Previous post
Next post
  • HackerRank Separate the Numbers solution
  • How AI Is Revolutionizing Personalized Learning in Schools
  • GTA 5 is the Game of the Year for 2024 and 2025
  • Hackerrank Day 5 loops 30 days of code solution
  • Hackerrank Day 6 Lets Review 30 days of code solution
©2025 Programming101 | WordPress Theme by SuperbThemes
Programming101
Programming101

Learn everything about programming

  • Home
  • CS Subjects
    • IoT – Internet of Things
    • Digital Communication
    • Human Values
  • Programming Tutorials
    • C Programming
    • Data structures and Algorithms
    • 100+ Java Programs
    • 100+ C Programs
  • HackerRank Solutions
    • HackerRank Algorithms Solutions
    • HackerRank C problems solutions
    • HackerRank C++ problems solutions
    • HackerRank Java problems solutions
    • HackerRank Python problems solutions