单点时限: 2.0 sec
内存限制: 256 MB
给定一个存储了若干个整数(个数范围:0 - 1000)的单向链表和一个整数 v,删除单向链表中所有值为 v 的节点。
第 1 行:一个整数 $T$ ($1 \le T \le 10$) 为问题数。
对于每个问题,有 3 行数据:第 1 行是一个整数 n 表示要在款表中存储数的个数,第 2 行是 n 个整数,第 3 行是 v。
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0:
等)。
然后对应每个问题在一行中输出经过删除操作后的数。
3 1 1 1 2 3 4 4 5 12 12 18 12 12 12
case #0: case #1: 3 case #2: 18
程序:
// ********** Specification of struct Node **********
typedef struct Node
{ int value;
struct Node *next;
}NODE;
/*/////////////////////////////////////////////////////*/
NODE *EraseNodes(NODE *h,int v)
{ //TODO: your definition
}
/*/////////////////////////////////////////////////////*/
/***************************************************************/
/* */
/* DON'T MODIFY below code anyway! */
/* */
/***************************************************************/
#include <stdio.h>
#include <malloc.h>
//********** Specification of EraseNodes(head,v) **********
NODE *EraseNodes(NODE *h,int v);
/* PreCondition:
h is a head pointer of a linked-list, v is an integer
PostCondition:
return the head pointer of a linked-list that has not v in its nodes
*/
void solve()
{ int i,n,v; NODE* head=0,*p,*tail;
scanf("%d",&n);
for (i=0;i<n;i++)
{ p=(NODE*)malloc(sizeof(NODE));
scanf("%d",&p->value); p->next=0;
if (head==0) head=tail=p; else { tail->next=p; tail=p; }
}
scanf("%d",&v);
//********** EraseNodes is called here **********
head=EraseNodes(head,v);
//****************************************
while (head)
{ p=head; head=head->next;
printf("%d",p->value);
if (head) printf(" ");
free(p);
}
printf("\\n");
}
int main()
{ int i,t;
scanf("%d\\n",&t);
for (i=0;i<t;i++)
{ printf("case #%d:\\n",i);
solve();
}
return 0;
}