Today we are going to solve HackerRank Day 24: More Linked Lists 30 days of code solution 30 days of code solution in C++, Java & Python.
Objective
Check out the Tutorial tab for learning materials and an instructional video!
Task
A Node class is provided for you in the editor. A Node object has an integer, data, field data and a Node instance pointer, next, pointing to another node (i.e.: the next node in a list).
A removeDuplicates function is declared in your editor, which takes a pointer to the node of a linked list as a parameter. Complete removeDuplicates so that it deletes any duplicate nodes from the list and returns the head of the updated list.
Note: The head pointer may be null, indicating that the list is empty. Be sure to reset your next pointer when performing deletions to avoid breaking the list.
Input Format
You do not need to read any input from stdin. The following input is handled by the locked stub code and passed to the removeDuplicates function:
The first line contains an integer, N, the number of nodes to be inserted.
The N subsequent lines each contain an integer describing the data value of a node being inserted at the list’s tail.
Constraints
The data elements of the linked list argument will always be in non-decreasing order.
Output Format
Your removeDuplicates function should return the head of the updated linked list. The locked stub code in your editor will print the returned list to stdout.
Sample Input
6
1
2
2
3
3
4
Sample Output
1 2 3 4
Explanation
N = 6, and our non-decreasing list is {1, 2, 2, 3, 3, 4}. The values 2 and 3 both occur twice in the list, so we remove the two duplicate nodes. We then return our updated (ascending) list, which is {1, 2, 3, 4}.
HackerRank Day 24: More Linked Lists 30 days of code solution
More Linked Lists HackerRank Solution in C
Node* removeDuplicates(Node *head){
//Write your code here
if (head == NULL || head->next == NULL) {
return head;
}
Node *prev = head;
Node *curr = head->next;
while (curr != NULL) {
if (prev->data == curr->data) {
prev->next = curr->next;
free(curr);
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
return head;
}
More Linked Lists HackerRank Solution in C++
Node* removeDuplicates(Node *head)
{
//Write your code here
if(head == nullptr){
return head;
}
Node *currentNode = head, *lastNode = head;
int lastVal = head->data;
for(;;){
currentNode = currentNode->next;
if(currentNode == nullptr){
break;
}
int currentVal = currentNode->data;
if(currentVal == lastVal){
lastNode->next = currentNode->next;
currentNode = lastNode;
} else {
lastVal = currentVal;
lastNode = currentNode;
}
}
return head;
}
More Linked Lists HackerRank Solution in Java
public static Node removeDuplicates(Node head) {
Set<Integer> set = new HashSet<Integer>();
if (head == null) return head;
set.add(head.data);
Node curr = head;
while (curr.next != null) {
if (set.contains(curr.next.data)) {
curr.next = curr.next.next;
} else {
set.add(curr.next.data);
curr = curr.next;
}
}
return head;
}
More Linked Lists HackerRank Solution in Python 3
def removeDuplicates(self,head):
qu = []
if head == None:
return
p = head
qu.append(p.data)
p = p.next
while p is not None:
qu.append(p.data)
p = p.next
qu = list(dict.fromkeys(qu))
for item in qu:
print(item,end=' ')
NEXT: HackerRank Day 25: Running Time and Complexity 30 days of code solution