dude sobre un error tema:listas simples y apuntadores
Publicado por tian long (3 intervenciones) el 23/04/2020 02:44:45
hola necesito ayuda con este codigo que se supone que debe crear una lista dinamica o uqe permita ingresar cuantos números se requiera y que elimine los repetidos un ejemplo se tiene la siguiente listas
1 2 3 5 2 3 4 1 6 y al eliminar los repetidos quedar asi 5 4 6
pero aqui esta el error al eliminar los repetidos si elimina el primer numero de la lista en programa deja de funcionar
si alguien me podría ayudar se lo agradecería o decir una forma de solucionarlo
1 2 3 5 2 3 4 1 6 y al eliminar los repetidos quedar asi 5 4 6
pero aqui esta el error al eliminar los repetidos si elimina el primer numero de la lista en programa deja de funcionar
si alguien me podría ayudar se lo agradecería o decir una forma de solucionarlo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
using namespace std;
struct nodo{ //creación del nodo para crear listas
int dato;
struct nodo *enlace;
};
void imprimir_lista(struct nodo *primero){
while(primero != NULL){
cout << primero->dato<<endl; //muestra la informacion
primero = primero->enlace; //pone el apuntador en el primer dato
}
}
void eliminar_nodo(struct nodo *primero, int valor ){
struct nodo *q, *r;
q=primero;
cout<<"eliminar "<<valor<<endl;
while(q != NULL){
cout<<"Entro "<<q->dato<<endl; //imprime el numero repetido
if((q->dato == valor)&&(q == primero)){
primero = primero->enlace;
}
if(q->dato == valor){
r = primero;
while (r->enlace != q){
r=r->enlace;
}
r->enlace = q->enlace;
delete(q);
q=primero;
}
q = q->enlace;
system("PAUSE");
}
//imprimir_lista(primero);
while(primero != NULL){
cout << primero->dato<<endl; //muestra la informacion
primero = primero->enlace;
}
}
void buscar_repetido(struct nodo *primero){
struct nodo *q, *r;
q = primero;
while (q != NULL){
r = q->enlace;
while(r != NULL){
if(r->dato == q->dato){ //si el dato que hay el el apuntador r es el mismo que la cabeza "q" entre al if
eliminar_nodo(primero, r->dato); //llama a la funcion eliminar nodo
q=primero;//iguala el apuntador al inicio
r=primero;//iguala el apuntador al unicio
}
r=r->enlace;
}
q=q->enlace;
}
}
main(){
struct nodo *cab, *nuevo, *ult, *p; //apuntadores de trabajo
char desea;
cab = new struct nodo(); // reserva espacio de memoria para almacenar información
cout<< "Digite el valor: ";
cin >> cab->dato; // asigna un valor al espacio reservado
ult = cab; // asigna el apuntador ult al mismo lugar donde esta apuntando cab
cout << "Desea continuar? s/n: ";
cin >> desea;
while(desea == 's' || desea == 'S'){
nuevo = new struct nodo(); //creando nodo nuevo
cout<< "Digite el valor: ";
cin >> nuevo->dato;
ult->enlace = nuevo; // conecta los dos nodos creados
ult = nuevo; //moviendo el apuntador ult al lugar del apuntador nuevo
cout << "Desea continuar? s/n: ";
cin >> desea;
}
ult->enlace = NULL;
p=cab; //ubica el apuntador p al inicio de la lista
imprimir_lista(p);
p=cab;
buscar_repetido(p);
}
Valora esta pregunta
0