【手把手带你刷好题】—— 46.环形链表(双指针)

举报
安然无虞 发表于 2022/05/26 22:23:10 2022/05/26
【摘要】 【前言】 今天是刷题打卡第46天! ...词穷了,总之加油鸭。 原题:环形链表(双指针)   示例1:   输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。  示例2: 输入:head = [1], ...

【前言】

今天是刷题打卡第46天!

...词穷了,总之加油鸭。

原题:环形链表(双指针)

 

示例1:

 


  
  1. 输入:head = [3,2,0,-4], pos = 1
  2. 输出:true
  3. 解释:链表中有一个环,其尾部连接到第二个节点。

 示例2:


  
  1. 输入:head = [1], pos = -1
  2. 输出:false
  3. 解释:链表中没有环。

 

思路(快慢指针):

很简单,利用快慢指针来做就行了,如果链表有环,那么slow和fast一定会相遇。

代码执行:


  
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. bool hasCycle(struct ListNode *head) {
  9. struct ListNode* slow = head;
  10. struct ListNode* fast = head;
  11. 这里添加fast->next目的是防止空指针异常,因为循环体内fast一次走两步
  12. while(fast && fast->next)//之所以加上fast->next!=NULL这个条件,防止越界访问导致空指针异常
  13. {
  14. slow = slow->next;
  15. fast = fast->next->next;
  16. if(slow == fast)
  17. {
  18. return true;
  19. }
  20. }
  21. return false;
  22. }

结语

今天是刷题打卡第46天!

加油吧少年。

  

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/121843054

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。