已知链表节点的定义:
typedef struct node {
int value;
char c;
struct node * link;
}Node;
以及预置代码,请补充函数体来实现删除链表中含有奇数或含有元音字符(AEIOU)节点的功能。
输入描述
共 n+1 行
第一行 读入整数n,表示链表中的节点个数;
接下来的n 行 每一行包括一个整型数字和一个字符;
输出描述
若干行,为剩余链表的内容;
样例输入
5
2 a
3 d
8 m
9 h
78 k
样例输出
8 m
78 k
解释】:其他节点中 含有奇数或者元音字符,应删除。
数据范围
1≤n≤100000, 节点中涉及到的数字均为小于32767自然数。
注意:本题已有如下方所示的前置代码,仅需提交代码中要求补全的函数,不会删成空链。
预设代码
前置代码
- /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
- # include <stdio.h>
- # include <string.h>
- # include <stdlib.h>
- typedef struct node {
- int value;
- char ch;
- struct node * link;
- }NODE;
- // 定义链表中每一个节点的内容;
- NODE * phead;
- // 生成正序的带有头节点的链表,并对于每一个节点分别读入整型数字与字符;
- void Creat(int n){
- NODE * p,*q;
- int v; char c;
- q =(NODE *) malloc(sizeof(NODE));
- q->link = NULL;
- phead = q;
- int i;
- for(i=1; i<=n;i++){
- scanf("%d %c",&v,&c);
- p = (NODE *)malloc(sizeof(NODE));
- p->value = v;
- p->ch = c;
- p->link = NULL;
- q->link = p;
- q = q->link;
- }
- }
- // 删除不符合要求的节点-------需要补全
- void Delete(void);
- // 打印链表中节点内容;
- void PrintNode(NODE * h){
- // printf("Print Node\n");
- NODE * q=h;
- q=q->link;
- while(q!=NULL){
- printf("%d %c\n",q->value,q->ch);
- q=q->link;
- }
- }
- int main(){
- int n,i,value,c;
- scanf("%d",&n);
- Creat(n);
- Delete();
- PrintNode(phead);
- return 0;
- }
- /* PRESET CODE END - NEVER TOUCH CODE ABOVE */
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ # include <stdio.h> # include <string.h> # include <stdlib.h> typedef struct node { int value; char ch; struct node * link; }NODE; // 定义链表中每一个节点的内容; NODE * phead; // 生成正序的带有头节点的链表,并对于每一个节点分别读入整型数字与字符; void Creat(int n){ NODE * p,*q; int v; char c; q =(NODE *) malloc(sizeof(NODE)); q->link = NULL; phead = q; int i; for(i=1; i<=n;i++){ scanf("%d %c",&v,&c); p = (NODE *)malloc(sizeof(NODE)); p->value = v; p->ch = c; p->link = NULL; q->link = p; q = q->link; } } // 删除不符合要求的节点-------需要补全 void Delete(void) { NODE *head = phead; NODE *p; while(head->link != NULL) { p=head->link; while(p->ch == 'a'||p->ch == 'e'||p->ch == 'i'||p->ch == 'o'||p->ch == 'u' ||p->ch == 'A'||p->ch == 'E'||p->ch == 'I'||p->ch == 'O'||p->ch == 'U' || (p->value)%2==1) { head->link=p->link; free(p); if(head->link!=NULL) p=head->link; } if(head->link!=NULL) head=head->link; } } // 打印链表中节点内容; void PrintNode(NODE * h){ // printf("Print Node\n"); NODE * q=h; q=q->link; while(q!=NULL){ printf("%d %c\n",q->value,q->ch); q=q->link; } } int main(){ int n,i,value,c; scanf("%d",&n); Creat(n); Delete(); PrintNode(phead); return 0; } /* PRESET CODE END - NEVER TOUCH CODE ABOVE */