160.链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

示例 1:

示例 2:

示例 3:

注意:

是相同的Node,而不是Node中的元素相同。一旦找到了相同的Node,那么后面必然都相同了,因为Node后面的链接肯定是一样的,因为是同一个Node。

思路:

先求出两个LinkedList的长度,让长的LinkedList为B,短的LinkedList为A,让cur B往前移动(len(B)-len(A))个Node,此时两个LinkedList尾部对齐了。比较cur A和cur B,如果相同,就找到了交点。如果不相同,就让curA和curB同时向后移动一个Node,再比较,以此类推,直到结尾,如果还是不相同,那么就是没有交点,返回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) -> Optional[ListNode]:
        lenA = 0
        lenB = 0
        cur = headA
     
        while cur:
            cur=cur.next
            lenA += 1
        cur=headB
        while cur:
            cur = cur.next
            lenB += 1
        if lenA > lenB:
            lenA, lenB = lenB, lenA
            headA, headB = headB, headA
        curA = headA
        curB = headB

        for i in range(lenB-lenA):
            curB = curB.next

        while curA:
            if curA == curB:
                return curA
            curA = curA.next
            curB = curB.next
        return None

正确,注意以下几点:

1. 记得先让curB移动(lenB-lenA)个Node。

2. if statement里面比较是否相等用的是 == ,而不是=

3. 交换长度后,较长的是B

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值