判断链表是否带环,若带环求环的长度,若带环求环的入口点
2017-07-17 00:09
417 查看
比较简单直接贴代码:
#pragma once //先定义一个链表结构体 typedef int TypeData; typedef struct NodeList { NodeList* _next; TypeData _data; }NodeList; //判断链表是否带环 时间复杂度为O(n) bool ListCircle(NodeList* list1) { NodeList* slow = list1; NodeList* fast = list1; while (fast && fast->_next) { fast = fast->_next->_next; slow = slow->_next; if (fast == slow) break; } return !(fast == NULL || fast->_next == NULL); } //若带环,求环的入口点 时间复杂度为O(n) NodeList* CirclePort(NodeList* list1) { NodeList* slow = list1; NodeList* fast = list1; while (fast && fast->_next) { fast = fast->_next->_next; slow = slow->_next; if (fast == slow) break; } if (fast == NULL || fast->_next == NULL) return NULL; //走到这个位置fast就是快慢指针相遇点 slow = list1; while (slow != fast) { slow = slow->_next; fast = fast->_next; } return slow; } //若带环求环的长度,时间复杂度为O(n) int LengthCircle(NodeList* list1) { NodeList* slow = list1; NodeList* fast = list1; int count = 0; while (fast && fast->_next) { fast = fast->_next->_next; slow = slow->_next; if (fast == slow) break; } if (fast == NULL || fast->_next == NULL) return NULL; //走到这个位置fast就是快慢指针相遇点 NodeList* cur = fast; do { count++; cur = cur->_next; } while (cur != fast); return count; }
相关文章推荐
- 判断链表是否带环?若带环求环的长度?求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 链表--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?
- 链表面试题----判断一个单链表是否带环,若带环,求入口点和环的长度
- 链表面试题之判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 剑指offer--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- -判断链表是否带环?若带环求环的长度?若带环求环的入口点
- 剑指offer 15---判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 剑指offer面试题-判断链表是否带环并求环的入口点和环的长度
- 链表 是否带环,环的长度以及入口点
- 【链表】判断链表是否有环,环的长度,环的入口点
- 判断单链表是否带环?若带环,求环的长度?求环的入口点?
- 65. 链表是否带环、环入口、环长度、链表相交问题分析与总结
- 判断单链表是否带环?若带环,求环的长度?求环的入口点?(C语言)
- [算法练习FindLoop]判断单向链表是否存在循环/循环入口/环长度