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

题目描述:输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

分析:双指针法。创建两个指针 p1 p2,分别指向两个链表的头结点,然后依次往后遍历。如果某个指针到达末尾,则将该指针指向另一个链表的头结点;如果两个指针所指的节点相同,则循环结束,返回当前指针指向的节点。比如两个链表分别为:1->3->4->5->6 和 2->7->8->9->5->6。短链表的指针 p1 会先到达尾部,然后重新指向长链表头部,当长链表的指针 p2 到达尾部时,重新指向短链表头部,此时 p1 在长链表中已经多走了 k 步(k为两个链表的长度差值),p1p2 位于同一起跑线,往后遍历找到相同节点即可。其实该方法主要就是用链表循环的方式替代了长链表指针先走 k 步这一步骤。

PS:与牛客相同!

代码:

posted on 2020-08-25 19:53  _那些你很冒险的梦  阅读(86)  评论(0)    收藏  举报

导航