问题
设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素。
解答
找到小于等于mink的结点和大于等于maxk的结点,进行连接即可。
/*
设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素。
*/
#include <iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;
void createList(LinkList &L) {
cout << "链表的元素个数:" << endl;
int n;
cin >> n;
L = new LNode;
L->next = NULL;
cout << "链表的元素:" << endl;
LinkList p = NULL, q = L;
for (int i = 0; i < n; ++i) {
p = new LNode;
cin >> p->data;
p->next = q->next;
q->next = p;
q = p;
}
}
void printList(LinkList L) {
LinkList p = L->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void deleteElement(LinkList &L, int mink, int maxk) {
LinkList p = L->next, pre, q, tmp;
while (p && p->data <= mink) {
pre = p;
p = p->next;
}
while (p && p->data < maxk) {
p = p->next;
}
q = pre->next;
pre->next = p;
while (q != p) {
tmp = q->next;
delete q;
q = tmp;
}
}
int main() {
LinkList L;
createList(L);
printList(L);
int mink, maxk;
cin >> mink >> maxk;
deleteElement(L, mink, maxk);
printList(L);
return 0;
}