您的位置:首页 > Web前端 > Node.js

【Hackerrank】Delete duplicate-value nodes from a sorted linked list

2013-12-16 09:55 253 查看
You’re given the pointer to the head node of a sorted linked list, where the data in the nodes is in ascending order. Delete as few nodes as possible so that the list does not contain any value more than once. The given head pointer may be null indicating
that the list is empty.

Input Format

You have to complete the
Node* RemoveDuplicates(Node* head)
method which takes one argument - the head of the sorted linked list. You should NOT read any input from stdin/console.

Output Format

Delete as few nodes as possible to ensure that no two nodes have the same data. Adjust the
next
pointers to ensure that the remaining nodes form a single sorted linked list. Then
return
the head of the sorted updated linked list. Do NOT print anything to stdout/console.

Sample Input

1 -> 1 -> 3 -> 3 -> 5 -> 6 -> NULL

NULL

Sample Output

1 -> 3 -> 5 -> 6 -> NULL
NULL

Explanation

1. 1 and 3 are repeated, and are deleted.

2. Empty list remains empty.

c++ code :

#include <iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct Node
{
int data;
Node *next;
};/*
Remove all duplicate elements from a sorted linked list
Node is defined as
struct Node
{
int data;
struct Node *next;
}
*/
Node* RemoveDuplicates(Node *head)
{
// This is a "method-only" submission.
// You only need to complete this method.
if(head == NULL || head->next == NULL)
return head;
Node *cur = head;
while(cur->next != NULL)
{
Node *sec = cur->next;
while(sec != NULL && sec->data == cur->data)
sec = sec->next;
if(sec != NULL)
{
Node *del = cur->next;
while(del != sec)
{
Node *_next = del->next;
delete del;
del = _next;
}
}
else if(sec == NULL)
{
Node *del = cur->next;
while(del != NULL)
{
Node *_next = del->next;
delete del;
del = _next;
}
}
cur->next = sec;
cur = sec;
if(cur == NULL)
break;
}
return head;

}void Print(Node *head)
{
bool ok = false;
while(head != NULL)
{
if(ok)cout<<" ";
else ok = true;
cout<<head->data;
head = head->next;
}
cout<<"\n";
}
Node* Insert(Node *head,int x)
{
Node *temp = new Node();
temp->data = x;
temp->next = NULL;
if(head == NULL)
{
return temp;
}
Node *temp1;
for(temp1 = head;temp1->next!=NULL;temp1= temp1->next);
temp1->next = temp;return head;
}
int main()
{
int t;
cin>>t;
while(t-- >0)
{
Node *A = NULL;
int m;cin>>m;
while(m--){
int x; cin>>x;
A = Insert(A,x);}
A = RemoveDuplicates(A);
Print(A);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: