题解 | #两个链表的第一个公共结点#

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

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

  1. 用两个指针 p1,p2 分别指向两个链表的头结点 headA,headB ,同时向后遍历。
  2. 当其中一个指针到达该指针所指链表末尾(NULL)时,重新将这个指针定位到另一个链表的头结点。(两个指针交替进行一次同样的操作)
  3. 当它们相遇时,所指向的结点就是第一个公共结点。

图示解释

设A链表的非公共部分长度为LA,B链表的非公共部分长度为LB,公共部分长度为C。 alt

A链表总长度为LA + C,B链表总长度为LB + C。 当指针按照题解方式走下去,p1第二次走到公共节点的时候,走过的长度为LA + C + LB,p2第二次走到公共节点的时候,走过的长度为LB + C + LA。p1 和 p2走过的长度相等,p1、p2 必会相遇。 所以,当p1 和 p2 相遇(相等)的时候,指向的节点就是公共节点。

#两个链表的第一个公共结点#
全部评论

相关推荐

2025-12-01 15:50
内蒙古工业大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务