链表的删除

已知链表节点的定义:

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自然数。

注意:本题已有如下方所示的前置代码,仅需提交代码中要求补全的函数,不会删成空链。

预设代码

前置代码

view plainprint?

  1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
  2. # include <stdio.h>  
  3. # include <string.h>  
  4. # include <stdlib.h>  
  5.   
  6. typedef struct node {  
  7.     int value;    
  8.     char ch;  
  9.     struct node  * link;  
  10. }NODE;  
  11. // 定义链表中每一个节点的内容;  
  12.   
  13. NODE * phead;  
  14. // 生成正序的带有头节点的链表,并对于每一个节点分别读入整型数字与字符;  
  15.   
  16. void Creat(int n){  
  17.     NODE * p,*q;  
  18.     int v; char c;  
  19.     q =(NODE *) malloc(sizeof(NODE));  
  20.     q->link = NULL;  
  21.     phead = q;  
  22.     int i;  
  23.     for(i=1; i<=n;i++){  
  24.         scanf("%d %c",&v,&c);  
  25.         p = (NODE *)malloc(sizeof(NODE));  
  26.         p->value = v;  
  27.         p->ch = c;  
  28.         p->link = NULL;  
  29.         q->link = p;   
  30.         q = q->link;  
  31.     }          
  32. }  
  33.   
  34. // 删除不符合要求的节点-------需要补全  
  35. void Delete(void);  
  36.   
  37. // 打印链表中节点内容;  
  38. void PrintNode(NODE * h){  
  39.     // printf("Print Node\n");  
  40.     NODE * q=h;  
  41.     q=q->link;  
  42.     while(q!=NULL){  
  43.         printf("%d %c\n",q->value,q->ch);  
  44.         q=q->link;  
  45.     }  
  46. }  
  47.   
  48. int main(){  
  49.     int n,i,value,c;  
  50.     scanf("%d",&n);  
  51.     Creat(n);  
  52.       
  53.     Delete();  
  54.     PrintNode(phead);  
  55.     return 0;  
  56. }  
  57.   
  58. /* 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 */  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值