leetcode刷题日记——Linked List Cycle
2015-12-24 20:34
190 查看
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
问题分析:判断一个单链表是否存在环,要求不使用额外的空间。刚开始对着题目发了半天呆,想着如果用循环,如果存在环就是死循环,后来想想是不是有什么策略来在循环过程中判断是否存在环然后退出,这样就避免了死循环。具体做法就是每访问一个节点,就将这个节点的值设置为NULL,然后不断去判断next节点所指的值,如果存在环,则在循环的过程中,肯定最后一个节点的下一个节点就会是之前被访问过并且值被设置为NULL的节点,这种情况出现了,return返回就好了,如果不存在那种情况,就不存在环,也就不存在死循环了。代码很简单,如下:
Follow up:
Can you solve it without using extra space?
问题分析:判断一个单链表是否存在环,要求不使用额外的空间。刚开始对着题目发了半天呆,想着如果用循环,如果存在环就是死循环,后来想想是不是有什么策略来在循环过程中判断是否存在环然后退出,这样就避免了死循环。具体做法就是每访问一个节点,就将这个节点的值设置为NULL,然后不断去判断next节点所指的值,如果存在环,则在循环的过程中,肯定最后一个节点的下一个节点就会是之前被访问过并且值被设置为NULL的节点,这种情况出现了,return返回就好了,如果不存在那种情况,就不存在环,也就不存在死循环了。代码很简单,如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { if(head==NULL) return false; ListNode *p=head; while(p->next){ if(p->next->val==NULL) return true; p->val=NULL; p=p->next; } return false; } };
相关文章推荐
- Java之美[从菜鸟到高手演变]系列之博文阅读导航
- 【转】算法-求二进制数中1的个数
- 笔记本win8,mac10.10,ubuntu,android四系统安装
- bzoj3572: [Hnoi2014]世界树
- 关于控件getWidth和getHeight方法都为0的解释及解决方法
- Efficient live disk backup with active blockcommit
- Miller_Rabin 大素数判断
- 最大连续和(分治法)
- 作业8:软件工程学习总结
- linux 每次关机后重启都要手动source /etc/profile
- 怀念一下当年刷的JzxxOJ
- (转)Android L Ripple的使用
- [java ] java.util.zip.ZipException: error in opening zip file
- 【AC自动机】hdu2222 hdu2896 hdu3065 zoj3430 poj2778 hdu2243
- 网络抓取页面乱码
- android音乐播放器,可进度条调节
- Python爬虫学习系列教程
- error LNK2001: 无法解析的外部符号 "__declspec(dllimport)
- [leetcode] 102. Binary Tree Level Order Traversal 解题报告
- 产品迭代开发