- 任務描述
- 編程要求
- 輸入
- 輸出
- 測試說明
- 來源
任務描述
本關任務:利用單鏈表表示一個遞增的整數序列,刪除鏈表中值大于等于mink且小于等于maxk的所有元素(mink和maxk是給定的兩個參數,其值可以和表中的元素相同,也可以不同)。
編程要求
輸入
多組數據,每組數據有兩行,第一行為鏈表的長度n,第二行為鏈表的n個元素(元素之間用空格分隔),第三行為給定的mink和maxk(用空格分隔)。當n=0時輸入結束。
輸出
對于每組數據分別輸出一行,依次輸出刪除元素后的鏈表元素,元素之間用空格分隔。
測試說明
平臺會對你編寫的代碼進行測試:
測試輸入: 5
1 2 3 4 5
2 4
6
2 4 6 8 10 12
3 5
0
預期輸出: 1 5
2 6 8 10 12
來源
BJFUOJ
開始你的任務吧,祝你成功!
#include <iostream>
using namespace std;
typedef struct LNode
{int data;struct LNode *next;
}LNode,*LinkList;
void CreateList_R(LinkList &L,int n)
{//后插法創建單鏈表L=new LNode;L->next=NULL;LinkList r=L;for(int i=0;i<n;i++){LinkList p=new LNode;cin>>p->data;p->next=NULL;r->next=p;r=p;}
}
void PrintList(LinkList &L)
{//打印依次輸出鏈表中的數據L=L->next;while(L){if(L->next!=NULL) cout<<L->data<<" ";else cout<<L->data;L=L->next;}cout<<endl;
}
void DeleteMinMax(LinkList &L,int mink,int maxk)
{//刪除鏈表中滿足區間值的結點
/**************begin************/
LinkList p=L->next,pre=L;
while(p)
{if(p->data>=mink && p->data <= maxk){pre->next=p->next;p=p->next;}else{p=p->next;pre=pre->next;}
}/**************end************/
}
int main()
{int n;while(cin>>n){if(n==0) break;LinkList L;CreateList_R(L,n);int mink,maxk;cin>>mink>>maxk;DeleteMinMax(L,mink,maxk);PrintList(L);}return 0;
}