1. 程式人生 > 實用技巧 >刪除連結串列中滿足區間值的結點

刪除連結串列中滿足區間值的結點

刪除連結串列中滿足區間值的結點

描述

利用單鏈表表示一個遞增的整數序列,刪除連結串列中值大於等於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; }