Linked List Cycle
来源:互联网 发布:长江交易软件下载 编辑:程序博客网 时间:2024/06/11 05:21
基本思想是要能够知道哪些节点是已经访问过的,这样如果再次访问已经访问过的节点,就是存在环的证明。如果用naive的想法,我们可以用一个set来记录已经访问过的节点,每当访问一个新的节点时,去查看是否已经存在于set中即可,这样平均需要消耗额外O(N)的空间。
如果想要省去这部分额外开销,必须从节点本身来考虑,能够改变节点的某些“特质”,使得我们能够认出已经访问过的节点。改变无非发生在两个地方,val或者next指针。经过思考。我们发现next指针是一个比较好的切入点(因为我们不能对list中节点所代表的值做任何假设),比较naive的想法是将访问过的节点的next指针设置为NULL,但稍作分析即可以发现,这样做我们无法和list无环的情况区分开,因为无环时最后一个节点的下一个节点本身就是NULL,所以我们要额外搞一个tag节点出来。
/** * 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) { ListNode* tag=new ListNode(0); while(head) { if((head->next)&&(head->next==tag)) { return true; } ListNode* tmp=head; head=head->next; tmp->next=tag; } return false; }};
0 0
- leetcode Linked List Cycle & Linked List Cycle ||
- Linked List Cycle II Linked List Cycle
- 【LeetCode】Linked List Cycle
- Leetcode: Linked List Cycle
- Leetcode Linked List Cycle
- Linked List Cycle
- Linked List Cycle II
- Linked List Cycle
- Linked List Cycle
- Linked List Cycle II
- Leetcode: Linked List Cycle
- LeetCode:Linked List Cycle
- Linked List Cycle II
- Linked List Cycle
- Linked List Cycle II
- [LeetCode]Linked List Cycle
- Linked List Cycle
- LeetCode | Linked List Cycle
- 【开发环境】创建Maven Web项目的详细过程
- 为什么开发者对Java 9如此的兴奋
- java处理json数据格式
- Java NIO系列教程(九) ServerSocketChannel
- 程序调试的利器—日志
- Linked List Cycle
- Oracle 字符集的查看和修改(二)
- 线程类
- Android应用开发相关下载资源
- 每天进步一点点——负载均衡之HTTP重定向
- Java NIO 系列教程
- MFC命名规则
- HDS成为2014-2015年度云计算大奖得主
- 再用环信sdk注册时返回错误码-1(appkey is not set)