2660 链表删除-填空
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 3560 | 通过数 : 1027
题目描述
编写一个程序实现对学生数据的操作,每个学生结点包括学号和一门课程的成绩,要求:(1)输入若干学生的学号和成绩建立链表;(2)根据学号删除指定的学生结点;(3)对链表进行输出。请对链表结点删除部分进行函数的编写。
输入要求
每行输入两个数据,第一个表示学号,第二个表示一门课程成绩。当学号输入-1时结束输入。(保证至少输入一个有效的学生信息)
然后再输入一个待删除的学号。
输出要求
按规定格式输出待删除的学号以及执行删除操作以后的链表信息,其中链表输出格式为head->x1,y1->x2,y2...->end,具体见样例
若删除后链表为空,则输出“LinkList is NULL!”。
输入样例
8901 90 8902 78 8903 93 8904 91 -1 8903
输出样例
delete:8903 head->8901,90->8902,78->8904,91->end
模板
#include<stdio.h> #include<stdlib.h> struct node { int number; float score; struct node *next; }; typedef struct node SNODE; SNODE *del_node(SNODE *head,int x) /*用于删除结点的函数,x为待删除数据*/ { @-@ //设计删除节点的具体语句 } void print(SNODE *head) /*用于输出链表的函数*/ { SNODE *p; p=head->next; if(p=='\0') printf("LinkList is NULL!\n"); else{ printf("head"); do{ printf("->%ld,%.0f",p->number,p->score); p=p->next; }while(p!=NULL); printf("->end\n"); } } SNODE *creat() /*用于创建链表的函数*/ { int num; float sco; SNODE *h,*s,*r; h=(SNODE*)malloc(sizeof(SNODE)); r=h; scanf("%d",&num); while(num!=-1) { scanf("%f",&sco); s=(SNODE*)malloc(sizeof(SNODE)); s->number=num; s->score=sco; r->next=s; r=s; scanf("%d",&num); } r->next='\0'; return h; } int main() { SNODE *head,*head2; int del_num; head=creat(); /*调用建立链表的函数*/; scanf("%d",&del_num); //输入要删除的学号 head2=del_node(head,del_num); /*调用删除结点的函数*/ print(head2); //输出删除一个结点后的链表内容 return 0; }
提示
不管待删除学号是否存在,输出中 "delete:****"这一行信息必须有 。本题一般建议用GCC或G++提交。
SNODE*p2=head->next;
SNODE*p1=head;
printf("delete:%d\n",x);
while(p2!=NULL)
{
if(p2->number==x)
{
p1->next=p2->next;
free(p2);
p2=p1->next;
}
else
{
p2=p2->next;
p1=p1->next;
}
}
return head;