一、结构体定义
typedef int DataType;
typedef struct ListNode//定义结点
{
DataType data;
struct ListNode* next;
}ListNode,*PListNode;
typedef struct PList//定义一个成员是指向结点的指针的结构体
{
PListNode PHead;
}PList,*PList;
二、函数实现
思路:判断一个链表是否带环的方法是:取两个指针a和b,一开始两个指针都指向链表的第一个结点;
然后让a指针以每次走一步的走法向前走,b指针以每次走两步的走法向前走,两个正指针同时开始走,如果链表带环,那么快慢指针终究会在环内一点相交;返回快慢指针的交点即可;
//9.判断一个链表是否带环,返回前后指针相遇的交点---前后指针法;
PListNode CheakCycle(PListNode PHead)
{
PListNode fast=NULL;//每次走两步
PListNode slow=NULL;//每次走一步
fast=PHead;
slow=PHead;
while (fast&&fast->next)//判断fast->next不为NULL,是为了防止下面fast->next->next对NULL指针访问,发生错误
{
fast=fast->next->next;
slow=slow->next;
//带环
if (fast==slow)
{
return fast;
}
}
//不带环
return NULL;
}