Ayuda en listas enlazadas
Publicado por diego (1 intervención) el 20/03/2018 03:27:39
tengo que hacer que el programa no pueda agregar nodos repetidos
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include "stdafx.h"
#include "iostream"
using namespace System;
using namespace std;
struct nodo {
int dato;
nodo *sig;
};
class Lse
{
private:
nodo * inicial;
nodo *buscarlista(int clave);
public:
Lse();
~Lse();
void agregar();
void eliminar();
void desplegarLista();
};
Lse::Lse() {
inicial = NULL;
};
Lse::~Lse() {
};
void Lse::desplegarLista() {
if (inicial == NULL) {
cout << "la lista esta vacia" << endl;
}
else
{
nodo *apunt;
apunt = inicial;
while (apunt != NULL) {
cout << apunt->dato << endl;
apunt = apunt->sig;
}
}
}
nodo *Lse::buscarlista(int clave)
{
//devuelve la direccion del noddo que antece al nuevo
//nodo que va ser agregado, o que va a ser eliminado.
//Si la clave es menor ao igual al primer nodo el valor
//devuelto es NULL.
//Si la clave es mayor que el dato del último nodo
//devuelve la dirección.
nodo*anterior;
anterior = NULL;
if (clave <= inicial->dato)return anterior;
else
{
anterior = inicial;
while ((anterior->sig != NULL) && (clave > anterior->sig->dato))
anterior = anterior->sig;
return anterior;
}
}
void Lse::agregar()
{
nodo *nuevo, *anterior;
char resp;
do
{
nuevo = new nodo();
cout << "Entre clave del nodo a agregar" << endl;
cin >> nuevo->dato;
if (inicial == NULL)
{
//agregar al primero de la lista
inicial = nuevo;
nuevo->sig = NULL;
}
else
{
Boolean repet;
while (inicial->sig) {
if (inicial->dato == nuevo->dato) {
delete nuevo->sig;
repet = true;
cout << "el nodo a agregar ya EXISTE" << endl;
break;
}
}
if (repet != true) {
//Agrega a una lista que tiene al menos un nodo
anterior = buscarlista(nuevo->dato);
if (anterior == NULL) {
//agrega un nodo que queda primero
// a una lista que no esta vacía
nuevo->sig = inicial;
inicial = nuevo;
//
}
else
{
if (anterior->sig != NULL)
{
//agrega un nodo que queda entre el primero y el último
nuevo->sig = anterior->sig;
anterior->sig = nuevo;
}
else
{
//agrega un nodo que queda de último
nuevo->sig = NULL;
anterior->sig = nuevo;
}
}
}
}
cout << "desea agregar otro nodo?s/n" << endl;
cin >> resp;
resp = tolower(resp);
} while (resp == 's');
}
Valora esta pregunta
0