Eliminar duplicados de lista enlazada utilizando el programa C ++

Aquí, vamos a aprender cómo eliminar duplicado de la lista enlazada mediante un programa en C ++ C?

Dada una lista ordenada enlazado (elementos se clasifican en orden ascendente). Eliminar duplicados de la LL dado, de tal manera que LL salida contiene sólo elementos únicos.

Formato de entrada: Vinculado elementos de la lista (separadas por el espacio y que terminan en 1)

    Sample Input 1 :
1 2 3 3 3 4 4 5 5 5 7 -1
Sample Output 1 :
1 2 3 4 5 7

Descripción:

En esta pregunta, se nos da una lista ordenada vinculados con elementos duplicados en el mismo. Nuestra tarea consiste en eliminar los nodos duplicados de la lista enlazada. Dado que la lista está ordenada, los elementos duplicados estarán presentes en los pedidos consecutivos, que hace el trabajo mucho más fácil.

Ejemplo:

    Lets the list be:
1->2->3->3->4->4->4->NULL
The modified list will be:
1->2->3->4->NULL

Solución Explicación:

Para resolver este problema, mantenemos el puntero que apunta a temperatura nodo. Mientras que (temp -> siguiente = class), comprobamos si los datos de temperatura es igual a los datos de TEMP-> siguiente. Si son iguales, vamos a señalar con el TEMP-> junto a temp -> siguiente -> siguiente.
LL original: 3-> 3-> 4-> …
Después de Cambio: 3-> 4-> … Dejando de lado el medio 3->

Esto mantendrá encendida hasta que llegamos al final de la lista y la cabeza NULL al final.

Pasos

    1.    1->2->3->3->4->4->4->NULL, temp = 1
2. 1->2->3->3->4->4->4->NULL, temp = 2
3. 1->2->3->3->4->4->4->NULL, temp = 3
4. 1->2->3->4->4->4->NULL, temp = 4
5. 1->2->3->4->4->NULL, temp = 4
Finally,
1->2->3->4->NULL

Función:

Node *removeDuplicate(Node* head){
//temp pointing to head
Node *temp = head;
while(temp->next != NULL && temp != NULL){
//Duplicate Found
if(temp->data == temp->next->data){
//DUplicate Removed
temp -> next = temp ->next ->next;
}
else{
//No Duplicate Present
temp = temp->next;
}
}
//Return Head
return head;
}

C ++ Code:

#include<bits/stdc++.h>
using namespace std;
struct Node{// linked list Node
int data;
Node * next;
};
Node *newNode(int k){ //defining new node
Node *temp = (Node*)malloc(sizeof(Node));
temp->data = k;
temp->next = NULL;
return temp;
}
//Used to add new node at the end of the list
Node *addNode(Node* head, int k){
if(head == NULL){
head = newNode(k);
}
else{
Node * temp = head;
Node * node = newNode(k);
while(temp->next!= NULL){
temp = temp->next;
}
temp-> next = node;
}
return head;
}
// Used to create new linked list and return head
Node *createNewLL(){
int cont = 1;
int data;
Node* head = NULL;
while(cont){
cout<<"Enter the data of the Node"<<endl;
cin>>data;
head = addNode(head,data);
cout<<"Do you want to continue?(0/1)"<<endl;
cin>>cont;
}
return head;
}
//To print the Linked List
void *printLL(Node * head){
while(head!= NULL){
cout<<head->data<<"->";
head = head-> next;
}
cout<<"NULL"<<endl;
}
//Function
Node *removeDuplicate(Node* head){
//temp pointing to head
Node *temp = head;
while(temp->next != NULL && temp != NULL){
//Duplicate Found
if(temp->data == temp->next->data){
//DUplicate Removed
temp -> next = temp ->next ->next;
}
else{
//No Duplicate Present
temp = temp->next;
}
}
//Return Head
return head;
}
//Driver Main
int main(){
Node * head = createNewLL();
cout<<"The linked list is"<<endl;
printLL(head);
head = removeDuplicate(head);
cout<<"The new Linked List is" <<endl;
printLL(head);
return 0;
}

salida

Enter the data of the Node
1
Do you want to continue?(0/1)
1
Enter the data of the Node
1
Do you want to continue?(0/1)
1
Enter the data of the Node
2
Do you want to continue?(0/1)
1
Enter the data of the Node
2
Do you want to continue?(0/1)
1
Enter the data of the Node
3
Do you want to continue?(0/1)
1
Enter the data of the Node
4
Do you want to continue?(0/1)
1
Enter the data of the Node
5
Do you want to continue?(0/1)
1
Enter the data of the Node
5
Do you want to continue?(0/1)
1
Enter the data of the Node
5
Do you want to continue?(0/1)
0
The linked list is
1->1->2->2->3->4->5->5->5->NULL
The new Linked List is
1->2->3->4->5->NULL


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *