LEETCODE | PYTHON | 160 | 相交链表
1. 题目
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/intersection-of-two-linked-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 代码
# 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) -> Optional[ListNode]:
#特殊情况判断:是否为空
if headA == None or headB == None:
return None
#初始化:curA,curB,lenA,lenB
curA = headA
curB = headB
lenA = 0
lenB = 0
#计算链表长度
while curA:
lenA = lenA + 1
curA = curA.next
while curB:
lenB = lenB + 1
curB = curB.next
#找到链表长度之差
gap = abs(lenA-lenB)
#尾部对齐,找到共同开头位置
curA = headA
curB = headB
while gap>0:
if lenA > lenB:
curA = curA.next
gap = gap - 1
elif lenB > lenA:
curB = curB.next
gap = gap - 1
#遍历判断是否相等
while curA and curB:
if curA == curB:
return curA
curA = curA.next
curB = curB.next
return None