LeetCode—141 环形链表 Cpp&Python
给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。
一、方法与思路
快慢指针法:建两个指针,在遍历时一个一次走一步,另一个一次走两步,若该链表有环,则快慢指针相遇返回True,否则返回False。
二、C++代码
class Solution {
public:
bool hasCycle(ListNode* head)
{
//两个运动员位于同意起点head
ListNode* faster= head ; //快
ListNode* slower= head ; //慢
if (head == NULL) //输入链表为空,必然不是循环链表
return false;
while (faster != NULL && faster->next != NULL)
{
faster = faster->next->next; //快的每次两步
slower = slower->next; //慢的每次一步
if (faster == slower) //相遇
return true; //Time:O(1) Space:O(1)
}
return false;
}
};
三、Python代码
class Solution:
def hasCycle(self, head):
if not head or not head.next: #节点不存在或下一个节点不存在
return False
slow = head
fast = head.next #起点错开,防止下面循环判断有问题
while fast and fast.next: #快节点和快节点下一个节点不为空
if slow == fast:
return True
slow = slow.next
fast = fast.next.next
return False
其他方法待补充