已知单链表的结点结构定义如下:
typedef struct _NODE_ { int data; struct _NODE_ *next; } NODE;
说明:data
为数据域。next
为指针域,指示后继结点。
请编写函数,删除带头结点的单链表中所有数据元素为奇数的结点。
函数原型
void RemoveOdd(NODE *head);
说明:参数 head
为单链表的头指针。函数将删除单链表中所有值为奇数的数据元素。
裁判程序
int main()
{
NODE *h;
Create(&h);
Input(h);
RemoveOdd(h);
Output(h);
putchar('\n');
Destroy(&h);
return 0;
}
说明:Create 函数用于创建链表,Destroy 函数用于销毁链表。Input 函数用于输入链表:首先输入结点数,然后输入这些数据元素。Output 函数用于输出单链表,数据元素之间以空格间隔。
输入样例
5
28 47 79 52 36
输出样例
28 52 36
要求:时间复杂度为 O(n),空间复杂度为 O(1)。
函数:
void RemoveOdd(NODE *head){
NODE *P,*L;
P=(NODE*)(malloc(sizeof(NODE)));
L=(NODE*)(malloc(sizeof(NODE)));
P=head;//创建P,L两个链表指针
L=head;
for(;P!=NULL;P=P->next){
if((P->data)%2==0){//当P的数据域为奇数的时候,一直向后指
L->next=P;//L的指针域就指向P(起到选择偶数的功能)
L=P;//L指向P,形成一条偶数的链表
}
}
L->next=NULL;//结尾置空
}