判断一个链表是否循环链表

本文介绍了一种使用快慢指针检测链表中是否存在循环的有效算法。通过对比快慢指针的位置来判断链表是否进入循环,确保算法的时间复杂度为O(n)。此方法简单高效,易于理解和实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int DetermineTermination(node* head)
{
 node *fast,*slow;
 fast=slow=head;
 while(1)
 {
  if(!fast || !fast-next)
   return 0;
  if(fast==slow || fast->next==slow)
   return 1;
  else
  {
   slow=slow->next;
   fast=fast->next->next;
     }
 }
}

当慢指针遍历到第n个结点的时候,块指针将遍历过2n个结点;所以不管链表尾部的循环体包含多少个结点,快指针肯定已经追上或者超过慢指针了。也就是说,你最多需要遍历3n个结点,因此该算法仍将是O(n)级的。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值