两个单向链表的第一个公共结点

该博客讨论了如何解决LeetCode上的160题——相交链表。作者指出,由于链表呈倒Y形,相交点之后的节点相同。解决方案包括:1) 让较短的链表先走两者长度差值,然后同步遍历直到找到公共节点;2) 使用两个栈从头遍历链表,栈顶元素不同则最近出栈元素为公共节点。时间复杂度和空间复杂度也进行了分析。

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

leetcode160:相交链表

题目:

编写一个程序,找到两个单链表相交的起始节点

实例:

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3
思路:

因为链表是单向链表,所以相交链表的形状就像倒置的 Y,这就有个==特点==:相交点之后的结点都相同。所以找到第一个相同的结点就是链表的第一个公共结点。

如果正向遍历链表,因为链表的长度不相同,所以无法通过的时间使他们的步伐统一。解决办法是首先比较链表两个的长度然后让较长的链表的先走他们长度的差值然后同一步伐一起走,知道走到的结点相同时,就找的了第一个公共结点。

时间复杂度分析:空间复杂度O(1),时间复杂度O(n)

运行时间:2ms

 //计算