Dev - C++ - Eliminar un nodo e imprimir los nodos restantes

 
Vista:
sin imagen de perfil

Eliminar un nodo e imprimir los nodos restantes

Publicado por alex (2 intervenciones) el 17/02/2019 20:58:32
NECESITO QUE SE PUEDA ELIMINAR UN NODO E IMPRIMIR LOS NODOS RESTANTES COMO TENDRÍA QUE SER ???...

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
#include<iostream>
using namespace std;
 
struct nodo {
	int dato;
	nodo* sig;
	};
 void agregar(struct nodo* &p,int valor)
{
	nodo* nuevo = new nodo;
	nuevo->dato =valor;
	nuevo->sig =NULL;
	if (p==NULL){
		p = nuevo;
	}
	else{
		nodo* aux = p;
		while (aux->sig !=NULL){
		aux = aux->sig;
		};
		aux->sig = nuevo;
	};
};
 
 
void borrar( struct nodo* &p,int valor ){
 
 
 
};
 
int main(){
	nodo* p=NULL;
	agregar(p,3);// p ya no es nulo cuando sale
	agregar(p,5);
	agregar(p,8);
    cout<<p;
    cout<<p;
    cout<<p;
 
	limpiar(p,3);//limpiar y que imprima los valores, funcion que borre un elemento (nodo)
	return 0;
}
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
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Eliminar un nodo e imprimir los nodos restantes

Publicado por Alfil (1444 intervenciones) el 18/02/2019 07:05:17
No me queda claro que estructura quieres hacer, ¿una secuencia ordenada, una pila, una cola??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar un nodo e imprimir los nodos restantes

Publicado por alex (2 intervenciones) el 18/02/2019 14:51:44
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
//COMPLETAR, DE MANERA QUE IMPRIMAM LA LISTA ENLAZADA
//, LUEGO QUE LIMPIE LA MEMORIA CREADA EN EL 
// HEAP, Y HACER UNA FUNCIÓN QUE DADO UN ELEMENTO ELIMINE SU NODO
#include <iostream>
using namespace std;
 
struct nodo{
   int dato;
   nodo* sig;
};
 
void agregar(struct nodo*& p,int valor){
   nodo* nuevo = new nodo;
   nuevo->dato = valor;
   nuevo->sig = NULL;
   if(p==NULL){
      p = nuevo;
   }
   else{
      nodo* aux = p;
      while(aux->sig!=NULL){
         aux = aux->sig;
      }
      aux->sig= nuevo;
   }
}
 
int main() {
 
   nodo* p = NULL;
   agregar(p,3);
   agregar(p,5);
   agregar(p,8);
 
  	////FALTA IMPLEMENTAR
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Eliminar un nodo e imprimir los nodos restantes

Publicado por Alfil (1444 intervenciones) el 18/02/2019 19:58:54
Es importante pasar la dirección del puntero y no el puntero en si, de esta forma nos aseguramos de que ptrInicial se mantiene al inicio de la lista.

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>
#include <cstdlib>
 
using namespace std;
 
struct nodo{
   int dato;
   struct nodo* ptrSiguiente;
};
 
typedef struct nodo NodoLista;
typedef NodoLista *ptrNodoLista;
 
void agregar( ptrNodoLista *ptrS, int valor );
void eliminar( ptrNodoLista *ptrS, int valor );
void imprimir(  ptrNodoLista ptrActual );
 
void agregar( ptrNodoLista *ptrS, int valor){
 
   ptrNodoLista ptrNuevo;
   ptrNodoLista ptrAux;
   ptrNuevo = new NodoLista;
 
   ptrNuevo->dato = valor;
   ptrNuevo->ptrSiguiente = NULL;
 
   if( *ptrS == NULL ){
      *ptrS = ptrNuevo;
   }
   else{
      ptrAux = *ptrS;
      while( ptrAux->ptrSiguiente != NULL){
         ptrAux = ptrAux->ptrSiguiente;
      }
      ptrAux->ptrSiguiente = ptrNuevo;
   }
}
 
void eliminar( ptrNodoLista *ptrS, int valor ){
 
    ptrNodoLista ptrAnterior;
    ptrNodoLista ptrActual;
    ptrNodoLista tempPtr;
 
    if( valor == ( *ptrS )->dato) {
        tempPtr = *ptrS;
        *ptrS = ( *ptrS )->ptrSiguiente;
        delete( tempPtr );
    }
    else {
        ptrAnterior = *ptrS;
        ptrActual = ( *ptrS )->ptrSiguiente;
 
        while( ptrActual != NULL && ptrActual->dato != valor ) {
            ptrAnterior = ptrActual;
            ptrActual = ptrActual->ptrSiguiente;
        }
 
        if( ptrActual != NULL ){
            tempPtr = ptrActual;
            ptrAnterior->ptrSiguiente = ptrActual->ptrSiguiente;
            delete( tempPtr );
        }
 
    }
 
}
 
void imprimir( ptrNodoLista ptrActual ) {
 
    if( ptrActual == NULL){
        cout << "\nLa lista esta vacia.\n\n";
    }
    else {
        cout << "La lista es:\n";
        while( ptrActual != NULL ){
            cout << ptrActual->dato << " -> ";
            ptrActual = ptrActual->ptrSiguiente;
        }
        cout << "NULL\n\n";
    }
}
 
int main() {
 
    int n;
    ptrNodoLista ptrInicial = NULL;
 
    agregar( &ptrInicial, 3 );
    agregar( &ptrInicial, 5 );
    agregar( &ptrInicial, 8 );
    agregar( &ptrInicial, 10 );
 
    imprimir( ptrInicial );
 
    cout << "Despues de eliminar el elemento 5.\n\n";
    eliminar( &ptrInicial, 5);
 
    imprimir( ptrInicial );
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar