小黑答案
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
node_a = headA
node_b = headB
arr = []
while node_a or node_b:
# 判断结点a是否被遍历过,如果没有则遍历
if node_a:
if node_a in arr:
return node_a
arr.append(node_a)
node_a = node_a.next
# 判断结点b是否被遍历过,如果没有则遍历
if node_b:
if node_b in arr:
return node_b
arr.append(node_b)
node_b = node_b.next
return None
哈希表法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
hash_arr = []
while headA:
hash_arr.append(headA)
headA = headA.next
while headB:
if headB in hash_arr:
return headB
headB = headB.next
return None
双指针法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
# 初始化双指针
node_a = headA
node_b = headB
# 开始遍历
while node_a != node_b:
if not node_a:
node_a = headB
else:
node_a = node_a.next
if not node_b:
node_b = headA
else:
node_b = node_b.next
return node_a