给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
一看不会,一看答案就懂
我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,如图:
此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。否则循环退出返回空指针。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
lenA,lenB = 0,0
# 计算 A B 的长度
cur = headA
while cur:
lenA += 1
cur = cur.next
cur = headB
while cur:
lenB += 1
cur = cur.next
# A B之间的差值
curA = headA
curB = headB
if lenA > lenB:
curA,curB = curB,curA
lenA,lenB = lenB,lenA
for _ in range(lenB - lenA):
curB = curB.next
# 找交集
while curA:
if curA == curB:
return curA
else:
curB = curB.next
curA = curA.next
return None