C语言如何将单链表改为单循环链表

2025-02-06 07:49:32
推荐回答(4个)
回答1:

#include

using std::cin;
using std::cout;
using std::endl;

template
struct Node
{
ElemType data;
Node* next;

Node()
: next(0)
{}
};

//单链表的模板类
template
class Linklist
{
private:
Node* head;
int _length;

public:
Linklist(){};
void Print(void);
void Sort(void);
void Delete(int);
void Creat(void);
void GameDelete(int);
void LinklistToCirclelist();
int Length() { return _length;}
void CombineKeepSame(Linklist &);
void CombineKillSame(Linklist &);
void CopyTo(Linklist &);

~Linklist()
{ while(head->next!=0)
{
Node* tmpNode=head->next;
for(int i=0;i<_length-1;i++)
tmpNode=tmpNode->next;
delete tmpNode;
}
delete head;
};
};
//单链表建立后,进行逐一赋值
template
void Linklist::Creat()
{
int len;
cout<<"该的单链表长度:";
cin>>len;

head=new Node;
_length=0;

Node* p;
p=head;

for(int i=0;i {
p->next=new Node;
cout<<"第"< cin>>p->next->data;
p=p->next;
_length++;
}

if(_length != len )
cout<<"输入的个数不对:len = "< Node* tmpNode=head->next;
for(int i=0;i<_length;i++)
{
cout<data<<" ";
tmpNode=tmpNode->next;
}
cout<}
//排序函数,对象排序
template
void Linklist::Sort()
{
ElemType temp;
Node* tmpNode=(*head).next;
for(int i=0;i<_length;i++)
{
for(int j=0;j<_length;j++)
{
if((*tmpNode).next==0)tmpNode=(*head).next;

if((*tmpNode).data>(*tmpNode).next->data)
{
temp=(*tmpNode).data;
(*tmpNode).data=((*tmpNode).next)->data;
((*tmpNode).next)->data=temp;
}
else
tmpNode=(*tmpNode).next;
}
}
}
template
void Linklist::LinklistToCirclelist()//把单链表转化为单循环链表
{
Node *tmpNode=head->next;
while(0!=tmpNode->next)
tmpNode=tmpNode->next;
head=head->next;
tmpNode->next=head;
}
template
void Linklist::Delete(int position)
{
Node *tmpNode=head;
Node *delNode;

for(int i=1;i1;i++)
{
tmpNode=tmpNode->next;
}
if(_length>1)
{
delNode=tmpNode->next;
tmpNode->next=delNode->next;
head=delNode->next;
delete delNode;
_length--;
}
}
template
void Linklist::GameDelete(int position)
{
while(_length!=1)
{
Delete(position);
Print();
}
}
int main()
{
Linklist LA;
cout<<"请输入一个单链表(字母):"< LA.Creat();
LA.Print();
LA.LinklistToCirclelist();//你可以在这设置个断点看看

int x;
cin>>x;

return 0;
}//这个是我上次试验写的,字数限制删除了两个函数…………

回答2:

单链表最后一个结点next不指向NULL,指向头结点即可。

回答3:

很简单啊,把最后一个元素的NEXT指向第一个元素

回答4:

应该将单链表的尾指针指向头指针就可以了