感动程序员的题解

博主分享了每日刷力扣题目的经历,通过一道求两个链表第一个公共节点的题目,阐述了程序员的独特思考。通过同步前进的指针策略找到链表交点,引发感慨:每个人都在走不同的路,但最终可能殊途同归。文章以Python优雅的解法结尾,并鼓励读者一起学习Python。
摘要由CSDN通过智能技术生成

为了保持编程能力,我计划每天刷一道力扣题目,目前已经坚持 6 天。

今天做完一道题后开始看题解,程序员真的有才,有个总结感动了很多程序员,也包括我,忍不住分享给你。

题目是求两个链表第一个公共节点,level 简单,截图如下:

思路确实不难,只要找到同一个起跑线,如图中的 a1 和 b2,然后同时前进,就可以找到第一个相遇的点。

定义两个指针指向 A,B,两个指针同时前进,短的链表比如 A 走到末尾时,再用一个指针 C 指向另一个链表(这里是 B)的头,然后 B,C 同时前进,B 走到末尾时,C 就指向了 b2,然后 b2 和 a1 同时前进就可以找到 c1。

不过评论区有个总结很精彩:

你变成我,走过我走过的路。

我变成你,走过你走过的路。

然后我们便相遇了...

看完这个,我不禁赞叹,刷题还刷出了人生感悟,回想起自己的过往,自己走过的路,别人不也走过么,别人走过的路,自己也正在尝试,有人来的早一些,有人晚一些,为了同一个目标,最终都会不期而遇。

附 Python 优雅的解法:


# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getInterpNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        node1, node2 = headA, headB
        
        while node1 != node2:
            node1 = node1.next if node1 else headB
            node2 = node2.next if node2 else headA

        return node1

关注我,一起学 Python。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值