Leetcode—相交链表双指针解法

该博客介绍了如何使用双指针法解决LeetCode中寻找两个单链表相交节点的问题。在O(n)的时间复杂度和O(1)的内存限制下,通过遍历两个链表并比较它们走过的路程来找到相交点。如果没有相交节点,则返回null。文章还提供了个人的实现和题解的实现。
摘要由CSDN通过智能技术生成

题目

查找两个单链表相交的起始节点
输入:相交节点的值、两个单链表listA和listB以及各自相交节点的索引值(每个单链表的第一个节点的索引值为0);
输出:两个单链表相交节点的值,如果两个节点不相交则返回null;

注意事项:

  • 如果两个链表没有交点,返回null
  • 在返回结果后,两个链表仍须保持原有的结构;
  • 假定整个链表结构中没有循环;
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存;

解法思路:
  使用一个节点指针node1通过对链表A的遍历,遍历完成后再将node1指针重新指向链表B的头节点,当走到图中的相交节点时:
链表A走过的路程为:a+c+b;
  链表B同理,当遍历完再将节点指针node2指向链表A的头节点,继续遍历,当遍历到相交节点的时:
链表B走过的路程为:b+c+a;
即:a+c+b=b+c+a,走过的路程相同,所以当经历过上述的一遍循环之后,两个指针必定会在相交节点相遇!
  所以输出该当前节点即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值