Leetcode刷题记录——160. 相交链表

在这里插入图片描述
在这里插入图片描述


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
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值