题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

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

如下面的两个链表:

在节点 c1 开始相交。

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Reference of the node with value = 2
输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
解释:这两个链表不相交,因此返回 null。

注意:

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

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *pa=headA,*pb=headB;
int len1=,len2=,dist=;
while(pa!=NULL){
len1++;
pa=pa->next;
}
while(pb!=NULL){
len2++;
pb=pb->next;
}
struct ListNode *longList,*shortList;
if(len1>len2){
longList=headA,shortList=headB;
dist=len1-len2;
}else{
longList=headB,shortList=headA;
dist=len2-len1;
}
while(dist--) longList=longList->next;
while(longList!=NULL){
if(longList==shortList) return longList;
longList=longList->next;
shortList=shortList->next;
}
return NULL;
}

最新文章

  1. 火狐浏览器如何js关闭窗口的几种解决方法
  2. linux挂着U盘和光盘
  3. Delphi名站以及高手Blog
  4. Myeclipse以及Genymotion工具的使用以及java后台开发小结
  5. mysql学习笔记 第七天
  6. jquery无限级下拉框
  7. 优化Linux下的内核TCP参数来提高服务器负载能力
  8. Hibernate 多对一关系中,在多的一方进行数据的插入
  9. [转贴]PHP 开发者应了解的 24 个库
  10. EF框架搭建
  11. ASPNET5中的那些K
  12. Xcode常见报错及解决办法
  13. mysql复习笔记
  14. BigInteger和BigDecimal的练习
  15. Android性能测试——Allocation Tracker(Device Monitor)
  16. vector 遍历
  17. Java中常见的URL问题及解决方案
  18. codeforces-1138 (div2)
  19. 30天自制操作系统 - 来一个hello world
  20. 20155208实验三 敏捷开发与XP实践

热门文章

  1. Python实现IOC控制反转
  2. 阿里云服务器ECS Ubuntu18.04 初次使用配置教程(图形界面安装)
  3. mongodb搭建带auth的主从
  4. Python应用——自定义排序全套方案
  5. hyper-v安装ubuntu18的全过程+踩过的坑(win10家庭版)
  6. JS高阶编程技巧--惰性函数
  7. Mac-App Store 购买过程中出错 请求超时
  8. python基础扩展
  9. 第2章 在 HTML中 使用 JavaScript
  10. EasyUI表单验证插件扩展