如何解决如何删除链表中用户指定的数据节点?
在函数 void eliminarXdato()中,将要求用户输入一个数字,并且该数字是否与链表结构 cedula 中的数字相同 将会删除它们。问题可能是合乎逻辑的,每当我尝试初始化所述函数时,它就会崩溃并突然结束程序,因此我不知道任何原因。
我试图省略无用的功能。
warning: ‘cab’ may be used uninitialized in this function
出租车打算担当头。
代码:
#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 PRINCIPAL\n\n");
printf("1. Ingresar nuevos datos\n");
printf("2. Mostrar la lista\n");
printf("3. Eliminar el primer dato de la lista (Mas antiguo)\n");
printf("4. Eliminar el dato central de la lista\n");
printf("5. Eliminar el ultimo dato de la lista (Mas nuevo)\n");
printf("6. Eliminar dato el deseado de la lista\n");
printf("7. Terminar el proceso\n");
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 ciudadano\n\nIngrese 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,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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。