142. 环形链表 II
快慢指针
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head==None:
return None
fast=head
slow=head
while fast.next and fast.next.next:
fast=fast.next.next
slow=slow.next
if slow==fast:
node1=head
node2=slow
while node1!=node2:
node1=node1.next
node2=node2.next
return node2
return None
哈希表
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
dict, i, j = {}, 0, 0
while head:
if head not in dict:#没找到环,加入字典
dict[head] = i
i+=1
else:#找到环,返回索引为 环所在的位置 的链表节点
while j < dict[head]:
head = head.next
j += 1
return head
head = head.next#继续向后搜索
return None