递归链表的操作
#include<iostream>
using namespace std;
typedef int ElemType ;
typedef struct node
{
ElemType data;
struct node *next;
}LinkNode,*LinkList;
void creat(LinkList&first,LinkNode*&last,int endTage)//递归尾插法建立链表
{
ElemType data;
cout<<"请建立数据"<<endl;
cin>>data;
if(endTage==data)
last=NULL;
else
{
last=new LinkNode;
last->data=data;
creat(first,last->next,endTage);
}
}
void output(LinkList&first)
{
if(first->next!=NULL)
{
cout<<first->next->data<<'\t';
output(first->next);
}
//cout<<endl;
}
LinkNode *Locate(LinkList&first,int i)//定位于第i个结点
{
int k=0;
if(i<0)
return NULL;
LinkNode *p=first;
while(p!=NULL&&k<i)
{
p=p->next;
k++;
}
return p;
}
bool Insert(LinkList&first,int i,ElemType x)
{
LinkNode *p=Locate(first,i-1);//定位i-1
if(p==NULL)
return false;
LinkNode *s=new LinkNode;
s->data=x;
s->next=p->next;
p->next=s;
return true;
}
bool remove(LinkList&first,int i)
{
LinkNode *p=Locate(first,i-1);
if(p==NULL||p->next==NULL)
return false;
LinkList s=p->next;
p->next=p->next->next;
delete s;
}
void main()
{
LinkList T;
T=new LinkNode;
cout<<"请输入建立链表的结束标志"<<endl;
cin>>T->data;
LinkNode *rear=T;
creat(T,rear->next,T->data);
output(T);
cout<<endl;
cout<<"请输入你要插入的位置和数据元素"<<endl;
int i,num;
cin>>i>>num;
Insert(T,i,num);
output(T);
cout<<endl;
cout<<"请输入你要删除元素的位置"<<endl;
cin>>i;
remove(T,i);
output(T);
cout<<endl;
}