删除链表中满足区间值的结点
描述
利用单链表表示一个递增的整数序列,删除链表中值大于等于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<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode* next;
}LNode,*LinkList;
void CreateLinkList(LinkList& L,int a) {
L = new LNode;
L->next = NULL;
LNode* s, * r = L;
for (int i = 0; i < a; i++) {
s = new LNode;
cin >> s->data;
r->next = s;
r = s;
}
r->next = NULL;
}
void Del(LinkList& L,int min,int max) {
LNode* p = L->next;
LNode* r = L;
L->next = NULL;
while (p) {
if (p->data < min || p->data > max) {
r->next = p;
r = p;
p = p->next;
}
else {
r->next = p->next;
p = p->next;
}
}
LNode* s = L->next;
while (s) {
if (s->next) {
cout << s->data << " ";
}
else {
cout << s->data;
}
s = s->next;
}
cout << endl;
}
int main() {
int n,mink,maxk;
while (1) {
cin >> n;
if (n == 0) {
break;
}
LinkList LA;
CreateLinkList(LA,n);
cin >> mink >> maxk;
Del(LA,mink,maxk);
}
return 0;
}