已知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&&current->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&&current->data<=max)
        {
            LNode *temp=current;
            current=current->next;
            pre->next=current;
            delete temp;
        }else{
            pre=current;
            current=current->next;
        }
    }
}

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐