链表的删除

已知链表节点的定义:

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   
  3. # include   
  4. # include   
  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   
    # include   
    # include   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 */  


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部