面试题:判断单链表是否为循环链表-快慢指针

来源:互联网 发布:泽国 unity3d 编辑:程序博客网 时间:2024/05/17 23:10

题目:判断单链表是否为循环链表(判断链表中是否存在环)

分析:使用快慢2个指针,2个指针都从链表头开始遍历,快指针每次移动2个结点,满指针每次移动1个结点。若链表中存在环,则快慢2指针后在链表的某一位置相遇,否则她们不会相遇。

typedef struct Lnode{  int data;  struct Lnode *next;}*Linklist;//检测单链表是否为循环链表或链表中是否存在环int findloop(Linklist *L){  Linklist fast,slow;  if(NULL == L)  {    printf("input error!\n");    return -1;  }  fast = slow = L;  while(1)  {    if(NULL == fast->next)      return -1;    else if((fast == slow) || (fast->next == slow))      return 0;    else    {      fast = fast->next->next;      slow = slow->next;    }  }}


原创粉丝点击