美文网首页
怎样验证给定的链表是环形的?(C语言)

怎样验证给定的链表是环形的?(C语言)

作者: 独孤蝴蝶 | 来源:发表于2019-09-26 21:02 被阅读0次

什么是循环链表:

其特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。其操作和线性链表基本一致,差别仅在于算法中的循环条件不是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;

}

相关文章

网友评论

      本文标题:怎样验证给定的链表是环形的?(C语言)

      本文链接:https://www.haomeiwen.com/subject/wtibuctx.html