链表的创建、插入以及删除


#include"node.h"

void createList(School*& );
void deleteNode(School*&,string);
void insertNode(School*&,School*,int);
void showList(School*);

int main()
{
    School* head=NULL;
    createList(head);
    cout<<"创建了一个关于学校的链表:"<<endl;
    showList(head);

    string schoolname;

    cout<<"请输入需要删除的学校:"<<endl;
    cin>>schoolname;
    deleteNode(head,schoolname);
    cout<<"删除"<<schoolname<<"后的链表:"<<endl;
    showList(head);


    School* node=new School;
    cout<<"请输入一个新的学校节点以及需要插入的位置:"<<endl;
    cin>>node->name;
    int pos;
    cin>>pos;
    insertNode(head,node,pos);
    cout<<"插入"<<node->name<<"于"<<pos<<"位置后的链表:"<<endl;
    showList(head);


    return 0;
}
void createList(School*& head)//由于初始化的时候,指向的是NULL,故这里必须传递指针的引用
{
    head=NULL;//开始是一个空链表
    School* node=new School;//创建节点的指针
    School* pend=NULL;//指向链表的最后一个节点
    cout<<"please input the school name"<<endl;
    do {
        cin>>node->name;//输入节点内容
        if(!strcmp(node->name,"EXIT"))//退出创建
            break;
        if(head==NULL)//如果是头节点
            head=node;
        else
            pend->next=node;
        pend=node;//更新pend指向链表最后一个元素
        node=new School;//创建新的节点

    }while(1);
    pend->next=NULL;//链表最后一个节点的后继节点为NULL
    delete node;
    return ;
}

void showList(School* head)
{
    if(head==NULL)
        return;
    while(head!=NULL)
    {
        cout<<head->name<<endl;
        head=head->next;
    }
}
void deleteNode(School*& head,string s)
{
    if(head==NULL)
        return;
    if(!strcmp(s.c_str(),head->name))//如果是删除头节点的元素,则需要修改头指针
    {
        head=head->next;
        return;
    }
    School* tmp=head;
    while(tmp->next!=NULL)
    {
        if(!strcmp(s.c_str(),tmp->next->name))
        {
            tmp->next=tmp->next->next;
            return;
        }
        tmp=tmp->next;//指向下一个节点
    }
    return;
}

void insertNode(School*& head,School* node,int pos)//将node插入第pos个位置,如果超过链表长度直接返回
{
    if(head==NULL)
        return ;
    if(pos==1)
    {
        node->next=&(*head);
        head=node;
        return;
    }
    School* tmpHead=head;
    while(((--pos)>1)&&tmpHead!=NULL)
        tmpHead=tmpHead->next;
    if(tmpHead==NULL)
        return;
    School* tmpNode=tmpHead->next;
    tmpHead->next=node;
    node->next=tmpNode;
    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值