法一:快慢指针
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode* slow = head, *fast =head;
while(fast && fast->next){
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
return true;
}
return false;
}
};
法二:修改访问过的指针的值
class Solution {
public:
bool hasCycle(ListNode *head) {
//将访问过的节点值修改为正常节点不可能取到的值
int visited = INT_MAX;
ListNode* curNode = head;
while(curNode != nullptr){
if(curNode->val == visited) return true;
else{
curNode->val = visited;
curNode = curNode->next;
}
}
return false;
}
};