有环链表问题求解
对于一个链表,如果它的尾部节点指向了前面的某个位置,则这个链表就是一个环形链表。在实际开发场景中,面试和笔试中都会频繁遇到这类问题。本文将介绍如何判断链表是否存在环,并给出具体的实现。
1.使用快慢指针法
快慢指针法通常用来判断链表是否存在环。快指针每次走两步,慢指针每次走一步,如果快指针追上慢指针,则该链表存在环。
具体算法如下:
bool hasCycle(ListNode *head) {
if(head == NULL || head->next == NULL) {
return false;
}
ListNode *slow = head;
ListNode *fast = head->next;
while(slow != fast) {
if(fast == NULL || fast->next == NULL) {
return false;
}
slow = slow->next;
fast = fast->next->next;
}
return true;
}
时间复杂度为O(n),空间复杂度为O(1)。
2.哈希表法
使用哈希表也可以判断链表是否