递归链表的操作

#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;
}

posted @ 2012-09-26 23:10  ♂咱說 ろ算  阅读(240)  评论(0编辑  收藏  举报