怎么把单链表修改成循环链表,只设置表尾指针而不设表头指针.字数限制,主函数部分没有贴出

struct LinkNode //链表结点类

{
int data;
LinkNode *link;
};

class List //链表类,直接使用链表结点类的数据和操作
{
private:
LinkNode *first; //链表头指针
public:
List(){first=new LinkNode;}
bool Input(int x); //初始化输入
bool IsEmpty(); //判空
bool Clear(); //清除
void Traverse(); //取元素
void Search(int a); //查找
bool Insert(int i,int x); //插入
bool Remove(int i); //删除
int Length(); //表长
};

//成员函数定义
bool List::Input(int n)
{
cout<<"请输入"<<n<<"个元素:"<<endl;
LinkNode *p,*q;
p= new LinkNode;
first->link=p;
for(int i=0;i<n;i++)
{
cin>>p->data;
q=p;
p=new LinkNode;
q->link=p;
q=q->link;
}
q->link=NULL;
return true;
}
bool List::IsEmpty()
{
return first->link==NULL?true:false;
}
bool List::Clear()
{
LinkNode *q;
while(first->link!=NULL)
{
q=first->link;
first->link=q->link;
delete q;
}
return true;
}
void List::Traverse()
{
LinkNode *p;
p=first;
p=p->link;
while(p->link!=NULL)
{
cout<<p->data<<" ";
p=p->link;
}
cout<<endl;
}
void List::Search(int x)
{
int i=0;
LinkNode *p;
p=first;
p=p->link;
while(p->link!=NULL)
{
i++;
if(x==p->data)
{
cout<<x<<"是单链表中的第"<<i<<"个元素."<<endl;
break;
}
p=p->link;
}
if(p->link==NULL)
cout<<x<<"不在单链表中!"<<endl;
}
bool List::Insert(int index,int x)
{
LinkNode *p,*q,*s;
p=first;
s=new LinkNode;
s->data=x;
for(int j=0;j<index;j++)
{
q=p;
p=p->link;
}
s->link=p;
q->link=s;
return true;
}
bool List::Remove(int index)
{
LinkNode *p,*q;
p=first;
for(int j=0;j<index;j++)
{
q=p;
p=p->link;
}
q->link=p->link;
return true;
}
int List::Length()
{
int i=0;
LinkNode *p;
p=first;
while(p->link!=NULL)
{
p=p->link;
i++;
}
return i;
}

第1个回答  2013-10-22
循环找到表尾指针q,q->next指向head就行追问

改了这个之后,判空那些相应的操作,有没有要改的?