数据结构与算法(作业十二)

环形链表

给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

运算代码如下:

class Solution
 {public: bool hasCycle(ListNode *head)
  {if(head==NULL||head->next==NULL) 
    return false; 
     ListNode *k=head;//检测节点 
     ListNode *q=head->next;//遍历节点  
     int count=0;//记录检测节点走了多少步   
       while(q)  
   {  for(int i=count;i>0;i--) 
     {k=k->next;
     if(k==q) 
     return true; } 
       k=head;//还原 
        q=q->next;   
         count++;      
           }       
      return false;  
       }};

这是穷举法
一个检测指针 k,遍历指针 q,count记录遍历指针q走的步数
遍历指针每走一步,检测指针 k 就走遍历指针 q 之前走过的节点,若发现相同的节点便说明有环
知道遍历节点 q 为 NULL 停止
复杂度分析:
检测节点 k 移动的次数远远大于遍历节点,当链表不存在环时,检测节点的移动次数为 1+2+3+…+n1+2+3+…+n ,计算可以直到时间复杂度为 O(n^2)O(n
2
)。空间复杂度为 O(1)O(1) 。
在这里插入图片描述
虽然耗时多,但是内存消耗极少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值