数据结构 — 4.删除单链表中所有值大于mink且小于maxk的元素

来源:互联网 发布:pulse secure mac下载 编辑:程序博客网 时间:2024/06/02 05:23

【问题描述】已知线性表中的元素以值非递减有序排列,并以单链表作为存储结构(含头结点),试写一高效的算法,删除

表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间(注意:mink和maxk是给定

的两个参变量,它们的值可以和表中的元素相同,也可以不同.)   这里注意是大于且小于,没有等于.


【输入形式】第一行:非递减序列以-1结束 第二行为 mink maxk 也以-1结束

【输出形式】删除后的链表数据

【样例输入】1 3 5 7 7 9 10 12 -1

                      3  9 -1
【样例输出】1 3 10 12


/*************************************************************************> File Name: test1.cpp    > Author:PeersLee    > Mail: 529884069@qq.com> Created Time: 2015年10月18日 星期日 09时43分30秒 ************************************************************************/#include<iostream>using namespace std;typedef struct Lnode{    int data;    struct Lnode *next;}Lnode,*LinkList;void CreatedList(LinkList &L){    LinkList p, q;    L = new Lnode();    L->next = NULL;    p = L;    while(1){        q = new Lnode();        q->next = NULL;                cin>>q->data;        if(q->data == -1) break;                p->next = q;        p = q;    }}void CoutList(LinkList L){    LinkList p;    p = L->next;    while(p){        cout<<p->data<<ends;        p = p->next;    }}void DeleteList(LinkList &L, int mink, int maxk){    LinkList p = L;    LinkList q = L->next;     while(q != NULL){        if(q->data > mink && q->data < maxk){            p->next = q->next;        delete q;        q=p->next;        }else{        p = p->next;        q = p->next;                    }    }}int main(){    LinkList L;    int mink, maxk, e;    CreatedList(L);    cin>>mink>>maxk>>e;    DeleteList(L,mink,maxk);    CoutList(L);        return 0;}


0 0
原创粉丝点击