计算概论(A) / 结构体与链表练习

  • #include
    #include
    struct node
    {
    	int data;
    	struct node *next;
    };
    int n,f,m;
    struct node *creat(void)
    {
    	struct node *head,*p1,*p2;
    	int i=0;
    	head=NULL;
    	for(i=0;idata=m;
    		p1->next=NULL;
    		if(head==NULL)
    		{
    			head=p1;
    		}
    		else
    			p2->next=p1;
    		p2=p1;
    	}
    	return head;
    }
    struct node *del(struct node *head,int f)
    {
    	struct node *p1,*p2;
    	p1=head;
    	while(p1!=NULL)
    	{
    		if(f==p1->data)
    		{
    			if(p1==head)
    			{
    				head=p1->next;
    				p2=p1->next;
    			}
    			else
    				p2->next=p1->next;
    		}
    		else
    		{
    			p2=p1;
    		
    		}	
    		p1=p1->next;
    	}
    	return head;
    }
    void print(struct node *head)
    {
    	struct node *p;
    	p=head;
    	int f1=0;
    	while(p!=NULL)
    	{
    		if(f1==0)
    		{
    			printf("%d",p->data);
    			f1=1;
    		}
    		else
    			printf(" %d",p->data);
    		p=p->next;
    	}
    	printf("\n");
    }
    int main()
    {
    	struct node *head;
    	scanf("%d",&n);
    	head=creat();
    	scanf("%d",&f);
    	head=del(head,f);
    	print(head);
    	return 0;
    
    }
    


  • View
  • Submit
  • Statistics
  • Clarify
总Time Limit: 
1000ms 
Memory Limit: 
65536kB
Description

给定N个整数,将这些整数中与M相等的删除 
假定给出的整数序列为:1,3,3,0,-3,5,6,8,3,10,22,-1,3,5,11,20,100,3,9,3 
应该将其放在一个链表中,链表长度为20 
要删除的数是3,删除以后,链表中只剩14个元素:1 0 -3 5 6 8 10 22 -1 5 11 20 100 9

要求:必须使用链表,不允许使用数组,也不允许不删除元素直接输出 
      程序中必须有链表的相关操作:建立链表,删除元素,输出删除后链表中元素,释放链表 
      不符合要求的程序即使通过,也会算作0分 

Input
输入包含3行:
第一行是一个整数n(1 <= n <= 200000),代表数组中元素的个数。
第二行包含n个整数,代表数组中的n个元素。每个整数之间用空格分隔;每个整数的取值在32位有符号整数范围以内。
第三行是一个整数k,代表待删除元素的值(k的取值也在32位有符号整数范围内)。
Output
输出只有1行:
将数组内所有待删除元素删除以后,输出数组内的剩余元素的值,每个整数之间用空格分隔。
Sample Input
20
1 3 3 0 -3 5 6 8 3 10 22 -1 3 5 11 20 100 3 9 3
3
Sample Output
1 0 -3 5 6 8 10 22 -1 5 11 20 100 9

你可能感兴趣的:(计算概论(A) / 结构体与链表练习)