第二章算法设计题8
题目描述
设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同 )。
代码实现
#pragma once
#include <iostream>
#include<string>
#define MAXSIZE 100
using namespace std;
typedef struct Lnode
{
int data;
struct Lnode* next;
}Lnode, * LinkList;
void CreateList_H(LinkList& L, int n)
{
L = new Lnode;
L->next = NULL;
Lnode* p;
for (int i = n - 1; i >= 0; i--)
{
p = new Lnode;
cout << "请输入第" << i + 1 << "个数据" << endl;
cin >> p->data;
p->next = L->next;
L->next = p;
}
}
void show(LinkList L)
{
Lnode* p;
p = L->next;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void Delete_Range(LinkList& L,int mink,int maxk)
{
Lnode* p=L->next;
Lnode* pre=new Lnode;
Lnode* q;
while (p && p->data <= mink)
{
pre = p;
p = p->next;
}
while (p && p->data <= maxk)
{
q = p;
p = p->next;
delete q;
}
pre->next = p;
}
int main()
{
LinkList LA;
cout << "前插法逆序输入" << endl;
cout << "请输入LA的元素:" << endl;
CreateList_H(LA, 5);
show(LA);
cout << string(30, '*') << endl;
Delete_Range(LA, 2, 9);
cout << "删除[2,9]之后的结果:" << endl;
show(LA);
system("pause");
return 0;
}
运行结果