leedcode 相交链表

本文介绍了一种高效算法,用于查找两个链表的相交节点。首先通过遍历确定两个链表的长度差,再调整较长链表的起始位置,确保两链表剩余部分等长。最后同步遍历两链表,首次遇到相同节点即为相交节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要找两个链表的相交节点,那就要保证从相交节点开始其元素个数相同,否则肯定不是相交节点。所以先通过遍历长链表使其剩余元素与短链表相等。然后同时遍历两个链表,找到两个节点相等的位置,该节点即为相交节点,这里要注意我们应该比较两个节点而不是两个节点的值,因为我们要保证其值不仅相同还要让其指向的next相同,其next相同说明其指向了同一个节点,那这个又保证了其后继节点的后继又是同一个节点,以此类推,后面的节点都是指向了同一个节点。

# 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
        """
        m = 0
        n = 0
        pNodea = headA
        pNodeb = headB
        if headA is None or headB is None:
            return None
        while(pNodea):
            m += 1
            pNodea = pNodea.next
        while pNodeb:
            n += 1
            pNodeb = pNodeb.next
        pNodea = headA
        pNodeb = headB
        if m > n:
            count = m - n
            while count > 0:
                pNodea = pNodea.next
                count = count - 1
        elif m < n:
            count = n - m
            while count > 0:
                pNodeb = pNodeb.next
                count = count - 1
        while pNodea:
            if pNodea == pNodeb:
                return pNodea
            else:
                pNodea = pNodea.next
                pNodeb = pNodeb.next
        return pNodea

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值