#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char name[20];
int salary;
struct empNode *next;
}empNode;
int size = sizeof(empNode);
empNode *delList(empNode *list);
void main()
{
empNode *list, *p = NULL, *q = NULL;
char name[20];
int num = 0, add = 0, salary, n = 0;
list = NULL;
printf("请输入姓名和工资(工资输入0,结束输入):\n");
scanf("%s%d", name, &salary);
while (salary != 0)
{
n++;
p = (struct empNode*)malloc(size);
strcpy(p->name, name);
p->salary = salary;
p->next = NULL;
if (n == 1)list = p;
else q->next = p;
q = p;
scanf("%s%d", name, &salary);
}
list=delList(list);
p = list;
printf("删除后的链表信息为:\n");
while (p != NULL)
{
printf("%s %d\n", p->name, p->salary);
p = p->next;
}
}
empNode *delList(empNode *list)
{
int delsalary;
printf("请输入要删除的工资:");
scanf("%d", &delsalary);
empNode *p = list, *del = NULL;
while (p != NULL)
{
if (list->salary == delsalary)
{
list = list->next;
p = list;
}
else if (p->next == delsalary)
{
del = p->next;
p->next = del->next;
free(del);
}
p = p->next;
}
return list;
}
为什么结果还是原来的链表?
把要删除节点的前一个节点的next 设置为要删除节点的next 节点,循环处理就可以了。
删除的时候不能使用list =list. next, 你这样等于没有头节点,肯定出问题,要把list赋值给一个临时变量,再这样处理。
头节点的地址是不能变的
请问我的代码有什么问题?
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632