动态链表中删除指定结点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
typedef struct student
{
int num;
char name[9];
int grade;
struct student *next;
}stu;
stu* c(void)
{
stu *head, *p1, *p2;
int n = 0;
p1 = p2 = (stu*)malloc(sizeof(stu));
head = NULL;
scanf("%d%s%d",&p1->num,p1->name,&p1->grade);
while (p1->num == 0)
{
n++;
if (n == 1)head = p1;
if (n != 1)p2->next = p1;
p2 = p1;
p1 = (stu*)malloc(sizeof(stu));
scanf("%d%s%d", &p1->num, p1->name, &p1->grade);
}
p2->next = NULL;
return(head);
}
stu* del(stu* head, int k)
{
stu *p1, *p2;
p1 = p2 = head;
if (head->num == k)
{
head = head->next;
return head;
}
while (p2->num != NULL)
{
p2 = p2->next;
if (p2->num == k)
{
p1->next=p2->next;
break;
}
p1 = p1->next;
}
return head;
}
int main()
{
stu *head;
head = (stu*)malloc(sizeof(stu));
head = c();
int key;
scanf("%d",&key);
head = del(head,key);
return 0;
}