Dev - C++ - Ayuda en listas enlazadas

   
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder