• 2660 链表删除-填空

    时间限制 : 2000/1000 MS(Java/Others) | 内存限制 : 65536/32768 KB(Java/Others)

    提交数 : 6707 | 通过数 : 2222

    题目描述

    编写一个程序实现对学生数据的操作,每个学生结点包括学号和一门课程的成绩,要求:(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++提交。

    来源

    NBU OJ

    [ 返回顶端 ] | [ 代码提交 ] | [ 统计数据 ] | [ 历史提交 ]