如
1 2 3和
1 2
两指针分别指A和B的头
向前走,当一个走到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:
cur1 = headA
cur2 = headB
while cur1 != cur2:
cur1 = cur1.next if cur1 != None else headB
cur2 = cur2.next if cur2 != None else headA
return cur1 if cur1 != None else 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:
len1 = 0
len2 = 0
cur1 = headA
cur2 = headB
while cur1 is not None:
len1 += 1
cur1 = cur1.next
while cur2 is not None:
len2 += 1
cur2 = cur2.next
if len1 != len2:
todo = headA if len1 > len2 else headB
wait = headB if len1 > len2 else headA
for i in range(abs(len1-len2)):
todo = todo.next
else:
todo = headA
wait = headB
cur1 = todo
cur2 = wait
while cur1 is not None:
if cur1 == cur2:
return cur1
else:
cur1 = cur1.next
cur2 = cur2.next
return None