在链表里如何发现循环链接?

在链表里如何发现循环链接?,第1张

正好我做过
可以构建两个迭代器p和pp,p一次向移动一个节点,pp一次移动两个节点,如果p和pp在某个时刻指向了同一个节点,那么该链表就有循环链接。
实现代码:
view plain
/
Author:花心龟
Blog:>网上这方面挺多的。你搜一下。我就大概说一下吧。
循环链表的 *** 作和线性链表 基本一致。
1。差别在于算法中的尾指针指向头结点。//这也是你判断其是否为空和结束的标志。
2。同时循环条件的差别不是H或H->next是否为空。而是判断它们是否是头结点。
我没有直接回答。你思考一下吧。
如果你会一般的线性链表的话。如果你理解力还行的话。我想我应该回答了你的问题。

#include<iostream>
using namespace std;
typedef struct node //定义一个结构体
{
char tj;
int date;
struct node next;
}pnode,qnode;
class List //创建一个类
{
private:
qnode phead; //定义一个指针为指向头结点的指针phead

public:
List() //构造函数,构造一个指向自己的头指针
{
phead=new node;
phead->next=phead;
}
void insert()
{
qnode new1=new node;

int a ;
cout<<"输入你想加入循环链表的数据"<<endl;
cin>>a;
new1->date=a;
if (phead->next==phead)//判断是否是空的循环的链表
{
phead->next=new1;
new1->next=phead;//回环

}
else {
qnode new2;//定义一个指向node的指针
new2=phead->next; //将首结点的指针赋值到new2中
do{
new2=new2->next;//将这个new2的指针移动到最后面
}while(new2->next!=phead);//while的判断的循环
new2=new1;
new2->next=phead;//回环
}
}
void bianli ()//定义遍历的函数,用以输出循环链表的数据
{
qnode current=phead;
if (phead->next==phead)//判断是否是空的循环的链表
cout<<"该链表是空循环链表"<<endl;
else
do{
current=current->next;
cout<<current->date<<" "<<endl;
}while(current->next!=phead);
}
};
void main()
{
List list;
listinsert();
listbianli();
}
//主要是-> 回环几个问题


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10372340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存