删除链表中满足区间值的结点

删除链表中满足区间值的结点
 

描述

 

利用单链表表示一个递增的整数序列,删除链表中值大于等于mink且小于等于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同)。

 

输入

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔),第三行为给定的mink和maxk(用空格分隔)。当n=0时输入结束。

输出

对于每组数据分别输出一行,依次输出删除元素后的链表元素,元素之间用空格分隔。

输入样例 1 

5
1 2 3 4 5
2 4
6
2 4 6 8 10 12
3 5
0

输出样例 1

1 5 
2 6 8 10 12




#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
#include<math.h>
#define MAXSIZE 1000
#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef struct LNode{
    int num;
    struct LNode *next; 
}LNode,* LinkList;

void Inist_List(LinkList& L){
    L=new LNode;
    L->next=NULL;
}

void Zuhe(LinkList& L1){
    LinkList H1=L1;
    int m,n;
    while(1){
        scanf("%d",&m);
        if(m==0)
            break;
        for(int i=0;i<m;i++){
            LinkList p= new LNode;
            scanf("%d",&p->num);
            p->next=NULL;
            L1->next=p;
            L1=p;
        }
        L1=H1;
        int  mink,maxk;
        scanf("%d%d",&mink,&maxk);
        LinkList t=L1;
        while(t->next){
            if(t->next->num>=mink&&t->next->num<=maxk){
                LinkList q=t->next;
                t->next=t->next->next;
                delete(q);
            }
            else t=t->next;
        }
        LinkList b=L1;
        while(b->next->next)
        {
            b=b->next;
            printf("%d ",b->num);
        }
        printf("%d\n",b->next->num);
    }
}

int main(){
    LinkList L1;
    Inist_List(L1);
    Zuhe(L1);
    return 0;
}

 

posted @ 2020-10-14 23:06  奕玑  阅读(293)  评论(0)    收藏  举报