如何删除链接列表中用户指定的数据节点



在函数void eliminaXdato((中,用户将被要求写入一个数字,如果该数字与链表结构cedula中的数字相同,则会将其删除。这个问题可能是合乎逻辑的,每当我试图初始化所述函数时,它就会崩溃并突然结束程序,所以我没有得到任何原因的线索。

我试图省略未使用的函数。

warning: ‘cab’ may be used uninitialized in this function

cab打算担任负责人。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
void menu();
void ingresar();
// void mostrar();
// void eliminarInicio();
// void eliminarCentral();
// void eliminarFinal();
void eliminarXdato();
// void funcionLeccion();
struct nodo
{
int cedula; // cedula aka data
struct nodo* nxt;
};
typedef struct nodo* lista;
lista cab, aux, aux1;
int opc = 0;
/*
int contador(struct nodo* cab)
{
int cont = 0;
while (cab != NULL) {
cab = cab->nxt;
cont++;
}
return cont;
}
*/
int main()
{
menu();
return 0;
}
void menu()
{
system("cls");
do
{
printf("MENU PRINCIPALnn");
printf("1. Ingresar nuevos datosn");
printf("2. Mostrar la listan");
printf("3. Eliminar el primer dato de la lista (Mas antiguo)n");
printf("4. Eliminar el dato central de la listan");
printf("5. Eliminar el ultimo dato de la lista (Mas nuevo)n");
printf("6. Eliminar dato el deseado de la listan");
printf("7. Terminar el proceson");
cin >> opc;
switch (opc)
{
case 1:
ingresar();
break;
case 2:
mostrar();
break;
/*          case 3: eliminarInicio();
break;
case 4: eliminarCentral();
break;
case 5: eliminarFinal();
break;
*/
case 6:
eliminarXdato(); // function
break;
default:
break;
}
} while (opc != 7);
}
void ingresar()
{
do
{
system("cls");
aux = new (struct nodo);
cout << "Cedula del ciudadanonnIngrese la cedula: n";
cin >> aux->cedula;
aux->nxt = NULL;
if (cab == NULL)
{
cab = aux;
}
else
{
aux1->nxt = aux;
}
aux1 = aux;
cout << "Desea agregar mas personas? [si=1/no=2]"; // TL: add more data?
cin >> opc;
system("cls");
} while (opc == 1);
}
void eliminarXdato()
{
// lista cab, aux, aux1;
int tkn = 0; // tried to use tkn for equal value check
cout << "Ingrese la cedula a eliminar: n";
cin >> tkn;
if (cab != NULL && cab->cedula == tkn)
{
cab = cab->nxt;
delete cab;
}
while (cab != NULL && cab->cedula != tkn)
{
aux1 = cab;
cab = cab->nxt;
}
if (cab == NULL)
aux1->nxt = cab->nxt;
delete cab;
}

我自己解决了,再见。

void eliminarXdato(){

aux=cab; // initialize stuff
int tkn = 0;

cout<<"Ingrese la cedula a eliminar: n";
cin>> tkn;
if (aux != NULL && aux->cedula == tkn) 
{ 
cab = aux->nxt;   
free(aux); // free function           
} 

while (aux != NULL && aux->cedula != tkn) 
{ 
aux1 = aux; 
aux = aux->nxt; 
} 

if (aux == NULL) return; 
aux1->nxt = aux->nxt; 
free(aux); // free function
}

相关内容

  • 没有找到相关文章

最新更新