136.只出现一次的数字
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = 0
for num in nums:
a = a ^ num
return a
141.环形链表I
class Solution:
def hasCycle(self, head: ListNode) -> bool:
# 快慢指针法
if head:
slow, fast = head, head.next
while fast:
slow, fast = slow.next, fast.next
if fast:
fast = fast.next
if fast is slow:
return True
return False
"""哈希法
hash_set = set()
while head:
if head in hash_set:
return True
hash_set.add(head)
head = head.next
return False
"""
142.环形链表II
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
# 首先初始化快指针和慢指针,确保快指针走的路的长度是慢指针长度的2倍
if head and head.next:
fast = head.next.next
slow = head.next
else:
return None # 说明无环
# 进行循环,首先让快指针和慢指针第一次相遇
while fast:
if fast != slow:
# 快指针走两步
if fast.next:
fast = fast.next.next
else:
return None # 说明无环
# 慢指针走一步
slow = slow.next
else:
detection = head
while detection != slow: # 此时由于slow和fast是一样的,用哪个都行
slow = slow.next
detection = detection.next
return detection