*输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:

在节点 c1 开始相交。

示例 1:

输入: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 个节点。

示例 2:

输入: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 个节点。

示例 3:

输入: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) 内存。*

这道题主要就是通过两个指针走两个链表直到相交,主要思路可以这样理解:相交之前的链表部分分别为L1L2c是他们两个的公共部分,令指针p指向head1,q指向head2,p走完链表1后走了L1+c的长度,然后让L1指向head2,q走完链表2后走了L2+c的长度,然后让L2指向head1,p,q分别继续走L2L1,最终相遇,都走了相同长度,p走了L1+c+L2,q走了L2+c+L1
看到了一个有趣的回答:

代码如下:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode * p=headA;struct ListNode * q=headB;while(p!=q){p=p?p->next:headB;//知道p走完第一个链表后将第二个链表头节点赋给它继续走q=q?q->next:headA;//同上}return p;
}

剑指 Offer 52. 两个链表的第一个公共节点(C语言)相关推荐

  1. 【LeetCode】剑指 Offer 52. 两个链表的第一个公共节点

    [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点 文章目录 [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点 一.双指针 一.双指针 设 "第一个 ...

  2. 剑指 Offer 52. 两个链表的第一个公共节点

    题目:剑指 Offer 52. 两个链表的第一个公共节点 ,哈哈,我们今天来看一道很简单的题嘛,这是选自剑指 Offer 上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不 ...

  3. 【Java】剑指 Offer 52. 两个链表的第一个公共节点

    题目 :输入两个链表,找出它们的第一个公共节点. 算法思路 : 首先我们要明确,两个链表相交,是Y形状的 两个链表相交,是next域相同 因为两个单链表的长度是不一样的,所以我们需要让长的那个链表,引 ...

  4. 【算法】剑指 Offer 52. 两个链表的第一个公共节点

    文章目录 1.概述 2. 有序 3. 循环 4. set集合 1.概述 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交.

  5. 剑指 Offer 52—— 两个链表的第一个公共节点

    题目链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/ 输入两个链表 ...

  6. LeetCode-剑指 Offer 52. 两个链表的第一个公共节点

    剑指 Offer 52. 两个链表的第一个公共节点 思路一:用set容器,不符合题意 /*** Definition for singly-linked list.* struct ListNode ...

  7. 《剑指offer》两个链表的第一个公共节点

    题目:输入两个链表,找出它们的第一个公共结点. 解析:暴力更直接.直接遍历两个链表分别存储到list1.list2,然后在list1和list2中找公共节点就好了 /* public class Li ...

  8. 剑指Offer之两个链表的第一个公共节点

    题目描述 输入两个链表,找出它们的第一个公共结点. 解题思路 首先,如果都是空链表,那么肯定返回空.两个单链表假设有公共节点,那么肯定是"Y"字型的. 先计算两个链表的长度,求出长 ...

  9. 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点

    一.两个链表的第一个公共结点: 1.题目: 输入两个链表,找出它们的第一个公共结点. 2.解题思路: (1)第一种:找出两个链表的长度,然后让长的链表先走两个链表的长度差,接着两个链表一起走. (2) ...

最新文章

  1. MySQLmmm群集
  2. windows怎么用qt MinGW gcc编译c代码
  3. 百度地图拖动标注后获取坐标
  4. 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
  5. 【Python】处理ConvergenceWarning: lbfgs failed to converge (status=1):STOP: ...
  6. SQL SERVER 内存分配及常见内存问题(1)——简介
  7. 队列C++ | 用数组实现队列_1
  8. 零基础学前端,自学还是培训机构?
  9. 为什么C++编程让人觉得那么难学?
  10. centos7下kubernetes(1。kubernetes---start)
  11. 设置Easyui datagrid的pageNumber导致两次请求的解决方案
  12. 全面理解ThreadLocal
  13. linux嵌入式开发从入门到精通
  14. velocity参数重新赋值_Velocity 语法详解
  15. arduino学习笔记十四--Arduino 环境光线传感器实验
  16. liunx下设置自动完成任务(每周六晚一点整,系统自动把/home目录文件下到所有文件做一个备份,备份到/var/backups/home.tar.gz))
  17. python爬取微博用户的微博内容和图片
  18. 去哪儿2018春季校园招聘软件开发工程师笔试经验
  19. APP自动化测试---adb常用命令+monkey自动化
  20. matlab am-pm,AM-AM和AM-PM测试的奇怪结果

热门文章

  1. 基于连通域字符分割的流程_基于OpenCV及连通域分析进行文本块分割
  2. 深度学习训练中噪声减小吗_【机器学习 155】DoubleEnsemble
  3. Algorithm之MC:Monte Carlo method蒙特·卡罗方法的简介、实现、应用
  4. Algorithm之RS:RS常用的一些库
  5. CentOS7密码忘记解决方法GRUB菜单加密
  6. drools7 (一、最简单的例子)
  7. vnc--centos 7 安装和配置
  8. 团队计划(5.25)
  9. 如何编写一份软件工程实验报告
  10. [数据结构与算法]平衡二叉树实现