#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;
}
链表的创建、插入以及删除
最新推荐文章于 2022-08-14 18:54:24 发布