```
样例 1:
输入: 21->10->4->5, then tail connects to node index 1(value 10).
输出: true
样例 2:
输入: 21->10->4->5->null
输出: false
```
挑战
不要使用额外的空间
输入测试数据 (每行一个参数)如何理解测试数据?
快慢指针解法:
如果是带环的,快慢指针最终会相等,则直接返回True,否则False,走到Null
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
"""
class Solution:
"""
@param head: The first node of linked list.
@return: True if it has a cycle, or false"""
def hasCycle(self, head):
# write your code here
#快慢指针,如果最终相等,则是带环
if not head: return False
slowPtr,fastPtr = head, head
#如果fasePtr有值的话,那么slowPtr一定也有值,所以如果要判断fastPtr.next.next是否有值,fastPtr.next必须需要先判断
while fastPtr.next and fastPtr.next.next:
slowPtr = slowPtr.next
fastPtr = fastPtr.next.next
#如果最终相等
if slowPtr == fastPtr:
return True
return False
set()解法,存储当前节点的地址,id(head),如果是已经访问过,则返回True
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
"""
class Solution:
"""
@param head: The first node of linked list.
@return: True if it has a cycle, or false"""
def hasCycle(self, head):
# write your code here
#set存储,访问过的节点id(head),如果已经访问过,则返回True,否则False,根据head的地址来进行存储
if not head: return False
array = set()
while head:
if (id(head) in array):
return True
else:
array.add(id(head))
head = head.next
return False