题目描述

输入两个链表,找出它们的第一个公共结点。

解题思路

首先,如果都是空链表,那么肯定返回空。两个单链表假设有公共节点,那么肯定是“Y”字型的。

  • 先计算两个链表的长度,求出长度差
  • 根据长度差,后移长链表的头指针,使得两个链表的现在的头指针的位置距离为节点一样
  • 同步移动,直到指针相等,是Y型的连接处,也就是公共点;注意没有公共点的情况。

AC代码

class Solution {public:ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {if(pHead1 == nullptr || pHead2 == nullptr) {  // 日常判空return nullptr;}int len1 = 0, len2 = 0;// 计算链1的长度ListNode* p = pHead1;while(p != nullptr) {++len1;p = p->next;}// 计算链2的长度p = pHead2;while(p != nullptr) {++len2;p = p->next;}// p1是长链,p2是短链auto p1 = (len1 > len2) ? pHead1 : pHead2;auto p2 = (len1 <= len2) ? pHead1 : pHead2;int len = max(len1, len2) - min(len1, len2);while(len > 0) {  // 长链后移,同步长度p1 = p1->next;--len;}// 寻找公共节点,注意没有的情况while(p1 != p2 && p1 != nullptr) {p1 = p1->next;p2 = p2->next;}return p1;}
};

剑指Offer之两个链表的第一个公共节点相关推荐

  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. 两个链表的第一个公共节点(C语言)

    *输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 离散数学 关系和有向图
  2. Prototype1.5.1源代码解读分析-1
  3. Zend Studio 8.0.1 官方汉化包安装 解决文本中文乱码
  4. linux中的c 环境变量,Linux C 参考手册 之 环境变量篇
  5. leetcode 795. Number of Subarrays with Bounded Maximum | 795. 区间子数组个数(Java)
  6. javaee 设计模式_JavaEE重新审视设计模式:装饰器
  7. ubuntu mysql开发_ubuntu linux mysql 开发模式与连接编译
  8. 2021零售行业营销自由白皮书
  9. 帝国CMS7.5仿金色财经整站源码+手机端+会员中心+投稿-财经综合门户
  10. 王思聪又双被限制消费了!
  11. java.math.BigDecimal cannot be cast to java.lang.Integer
  12. 机器视觉硬件选型相关知识
  13. 【MySQL基础 安装】CentOS 7 Yum网络部署 最新官方MySQL5 2020_2_1
  14. 小程序中如何引用阿里图标
  15. Asterisk增加g729编码支持
  16. IMU(陀螺仪)角速度测量原理-科氏力测旋转角速度
  17. android 颜色渐变扩散,Android 颜色渐变(gradient)的实现总结
  18. LLVM SSA 介绍
  19. Kafka CPU使用率高排查思路及解决方案
  20. Steam根目录下userdata文件夹命名规则

热门文章

  1. 高阻态是0还是1_羽毛球拍穿线,先拉横线还是竖线?是否横线要比竖线高1到2磅?...
  2. leetcode 273场周赛 Problem-C
  3. Resnet-18-训练实验-warm up操作
  4. L - Oil Deposits
  5. 2018年第九届蓝桥杯【C++省赛B组】【第六题:递增三元组】——二分解法
  6. Python遍历文件夹获取文件名并写入excel
  7. c/c++入门教程 - 2.4.5 c++运算符重载(加号、左移、递增、赋值、关系、函数调用)
  8. 解决百度云下载过慢、Linux下载百度云数据问题
  9. CodeBlocks常用快捷键
  10. 敏捷开发“松结对编程”系列之七:问题集之一