删除链表中m<e<n的元素

#include <iostream>
#include<string>
#include<vector>
using namespace std;
typedef struct Lnode//链表节点
{
    int e;
    Lnode* next;
};
typedef struct Link//链表
{
    Lnode* head;
};
Link* creat_list()//生成链表
{
    Link* l=new Link();
    if(!l)
        return NULL;
    l->head=new Lnode();

    if(!l->head)
        {
            delete(l);
            return NULL;
        }
        l->head->next=NULL;
        l->head->e=0;
    return l;
}
Lnode* creat_node(int e)//生成新的节点
{
    Lnode* pn=new Lnode();
    if(!pn)
        return NULL;
    pn->next=NULL;
    pn->e=e;
    return pn;
}
int l_insert(Link* l,int e)//按从小到大插入
{
    if(!l)
        return -1;
    Lnode* pre=l->head;
    Lnode* pt=pre->next;

    while(pt)//
    {
        if(pt->e<e)
        {
            pre=pt;
            pt=pt->next;

        }
        else
        {
            Lnode* pn=creat_node(e);
            if(!pn)
                return -1;
            pn=pre->next;
            pre->next=pn;
            break;
        }
    }
    if(!pt)
    {
         Lnode* pn=creat_node(e);
            if(!pn)
                return -1;
            pn->next=pre->next;
            pre->next=pn;
    }
    return 0;
}
int l_delete(Link* l,int m,int n)//删除函数
{
    if(!l||!l->head->next)
        return -1;
    Lnode* pre=l->head;
    Lnode* p=pre->next;
    while(p)
    {
        if(p->e<m)
        {
            pre=p;
            p=p->next;
        }
        else
        {
            break;
        }
    }
    while(p)
    {
        if(p->e>=n)
        {
            break;
        }
        else
        {
            p=p->next;
        }

    }
    Lnode* pt=pre;
    pre=pre->next;
    pt->next=p;
    while(pre!=p)
    {
        Lnode* s=pre;
        pre=pre->next;
        delete s;
        s=NULL;
    }
    return 0;
}
int main()
{
    Link* L=creat_list();
    if(!L)
        return -1;
    for(int i=1;i<10;i++)
    {
        if(l_insert(L,i))
            return -1;
    }
    int m=3;
    int n=6;
    if(l_delete(L,m,n))
        return -1;
    Lnode* pm=L->head->next;
    while(pm)
    {
        cout<<pm->e<<endl;
        pm=pm->next;
    }
   return 0;
}

 

posted on 2015-11-20 10:12  菜鸟基地  阅读(152)  评论(0)    收藏  举报

导航