PTA:jmu-ds-链表区间删除
·
已知L是一个带头结点的单链表,要求:
- 用插入排序方法创建链表L,L递增有序排列。
- 输入一个区间,能删除区间及区间内数。若全部删除,输出
NULL - 输出删除区间后的链表,应该是一个有序的链表。
###输入要求
- 第一行先输入链表数据项个数,再输入各个数据项(无序)
- 第二行输入区间的最小值和最大值
###输出要求
输出删除给定区间后的链表,若链表不空,则输出递增排序链表,元素之间空格隔开。若链表为空,输出NULL
你需要实现下面2个函数:
void InsertList(LinkList &L,int n);//链表中插入n个节点,并保持链表递增有序
void DelList(LinkList &L,int min,int max);//删除[min,max]内元素
L:单链表n:链表节点数目min,max:区间的最小、最大值
裁判测试程序样例:
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode //定义单链表结点类型
{
ElemType data;
struct LNode *next; //指向后继结点
} LNode,*LinkList;
void InsertList(LinkList &L,int n);//链表中插入n个节点,并保持链表递增有序
void DispList(LinkList L);//输出链表
void DestroyList(LinkList &L);//销毁链表,细节不表
void DelList(LinkList &L,int min,int max);//删除[min,max]内元素
int main()
{
LinkList L;
int n,min,max;
cin>>n;
InsertList(L,n);//链表中插入n个节点,并保持链表递增有序
cin>>min;
cin>>max;
DelList(L,min,max);//删除[min,max]内元素
DispList(L);//输出链表,细节不表
DestroyList(L);//细节不表
return 0;
}
/* 请在这里填写答案 */
输入样例:
5 1 2 9 4 8
2 5
输出样例:
1 8 9
代码如下:
void InsertList(LinkList &L,int n)//链表中插入n个节点,并保持链表递增有序
{
L=new LNode;
L->next=NULL;
for(int i=0;i<n;i++)
{
int num;
cin>>num;
LNode *p=new LNode;
p->data=num;
LNode *pre=L;
LNode *current=L->next;
while(current!=NULL&¤t->data<num)
{
pre=current;
current=current->next;
}
p->next=current;
pre->next=p;
}
}
void DelList(LinkList &L,int min,int max)//删除[min,max]内元素
{
LNode *pre=L;
LNode *current=L->next;
while(current!=NULL)
{
if(current->data>=min&¤t->data<=max)
{
LNode *temp=current;
current=current->next;
pre->next=current;
delete temp;
}else{
pre=current;
current=current->next;
}
}
}
更多推荐
所有评论(0)