#include<iostream>
using namespace
std;
class
LinkList
{
char *elem;
LinkList *next;
static int
length;
public:
LinkList(char *e) //一个含头结点的构造函数
{
elem=NULL;
next=new LinkList(e,1);
}
LinkList(char *e,int i)//不含头结点的构造函数
{
length++;
elem=new char(sizeof(e)+1);
strcpy(elem,e);
next=NULL;
}
void GetElem(int
i,char *&e); //查询第i个元素的值
void
ListInsert(int
i,char *e);
//插入函数
void ListDelete(int i,char
*&e);
//节点删除函数
void ClearList();
//清空链表
void
CreatList(int n);
//生成N个节点的链表
void show();
//显示所有节点
};
int LinkList::length=0;
void
LinkList::GetElem(int i,char
*&e)
{
LinkList *p=this->next;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
{ cout<<"error
position"<<endl;
return;
}
e=new char(sizeof(p->elem)+1);
strcpy(e,p->elem);
}
void LinkList::ListInsert(int
i,char *e)
{
LinkList *p=this;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
cout<<"insert position error"<<endl;
return;
}
LinkList *q=new LinkList(e,1);
q->next=p->next;
p->next=q;
show();
}
void LinkList::ListDelete(int
i,char *&e)
{
LinkList *p=this;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
cout<<"insert position error"<<endl;
return;
}
LinkList *q=p->next;
if(i!=length)
//删除最后一个节点时,需要注意的是q->next是没有定义的,会出错的,因此此处要特别对待!!!!
p->next=q->next;
else
p->next=NULL;
e=new char(sizeof(q->elem)+1);
strcpy(e,q->elem);
delete(q);
length--;
show();
}
void LinkList::ClearList()
{
LinkList *p;
while(this->next)
{
p=this->next;
this->next=p->next;
delete
p;
}
length=0;
cout<<"all
nodes are cleared"<<endl;
}
void
LinkList::show()
{
LinkList *p=this->next;
int i=1;
while(p)
{
cout<<"the "<<i<<"th
Node elem is:"<<p->elem<<endl;
p=p->next;
i++;
}
cout<<"_______________________________"<<endl;
}
void
main()
{
LinkList a("baichi");
char *co=NULL;
a.ListInsert(1,"sb250");
a.ListInsert(1,"dasb250dsdf");
a.ListDelete(3,co);
cout<<"bei
shan chu de:"<<co<<endl;
a.GetElem(1,co);
cout<<co<<endl;
a.GetElem(3,co);
a.ClearList();
}