美文网首页
怎样验证给定的链表是环形的?(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