为了保持编程能力,我计划每天刷一道力扣题目,目前已经坚持 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。