什么是循环链表:
其特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。其操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p->next是否为空,而是他们是否等于头指针。
创建循环链表的的代码:
数据准备:
typedef struct node
{
char data;
struct node *next;
}*LinkList;
LinkList CreateLinkList()
{
char ch;
LinkList list = NULL;
scanf("%c",&ch);
list = (LinkList)malloc(sizeof(LinkList));
list->data = ch;
//list->next = NULL;//线性链表
list->next = list;
return list;
}
题解:创建两个指针,一个快指针fast,一个慢指针slow,慢指针每次移动一个位置,快指针每次移动两个位置,当两个指针相遇的时候就可断定此链表为环形链表。
代码:
只是作为判断我们返回为0或值1即可
int IsCycle(LinkList head)
{
LinkList fast = head;
LinkList slow = head;
while(fast && slow && fast->next)
{
fast = fast->next->next;
slow = slow->next;
if(slow == fast)
return 1;
}
return 0;
}
网友评论