有环链表问题求解
对于一个链表,如果它的尾部节点指向了前面的某个位置,则这个链表就是一个环形链表。在实际开发场景中,面试和笔试中都会频繁遇到这类问题。本文将介绍如何判断链表是否存在环,并给出具体的实现。
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.哈希表法
使用哈希表也可以判断链表是否存在环。遍历链表,将每个节点加入哈希表中,若某个节点已经在哈希表中,则该链表存在环。
具体算法如下:
bool hasCycle(ListNode *head) {
unor
本文介绍了如何解决有环链表问题,包括使用快慢指针法和哈希表法来判断链表是否存在环。快慢指针法中,快指针每次前进两步,慢指针一步,相遇则有环;哈希表法则是遍历链表,节点在哈希表中出现则表明有环。这两种方法的时间复杂度和空间复杂度分别为O(n)和O(n)。
订阅专栏 解锁全文
3060

被折叠的 条评论
为什么被折叠?



