链表判环练习
来源:互联网 发布:小企业会计记账软件 编辑:程序博客网 时间:2024/06/08 07:11
如何判断一个单链表是否有环?有环的话返回进入环的第一个节点的值,无环的话返回-1。如果链表的长度为N,请做到时间复杂度O(N),额外空间复杂度O(1)。
给定一个单链表的头结点head(注意另一个参数adjust为加密后的数据调整参数,方便数据设置,与本题求解无关),请返回所求值。
弗洛伊德判环法,算法证明http://www.cnblogs.com/chengyeliang/p/4454290.html
设置两个指针,为了避免头指针问题设置辅助头节点,快指针每次走两步,慢指针每次走一步,若两个指针没有相遇则无环,如果相遇则有环,相遇之后将快指针节点重新设置为头结点,之后快指针和慢指针每次都只走一步,再次相遇的位置就是环入口。如果不要求空间复杂度为O(1)可以考虑直接利用哈希表判断是否有重复节点。第一次重复的位置就是环入口。
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class ChkLoop {public: int chkLoop(ListNode* head, int adjust) { if(!head) return -1; ListNode* prehead=new ListNode(0); prehead->next=head; ListNode* fast=prehead; ListNode* slow=prehead; while(fast&&fast->next) { fast=fast->next->next; slow=slow->next; if(fast==slow) { fast=prehead; while(fast!=slow) { fast=fast->next; slow=slow->next; } return fast->val; } } return -1; }};
0 0
- 链表判环练习
- 练习
- “++”“--”练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- 练习
- angularjs2--tab页调用父页面的方法
- python最简单的爬虫
- 插入排序
- [BZOJ1998][Hnoi2010]Fsk物品调度(置换群+并查集)
- Node.js request实现技术灌水
- 链表判环练习
- 全排列计算(康托展开)
- JSON简单介绍
- 喝汽水问题
- android recent key长按事件弹起触发最近列表故障分析
- 在SpringBoot中使用 拦截器
- 浏览器兼容问题及解决办法
- JS——prototype、闭包、跨域
- MYSQL批量插入千万级数据只需百秒