牛客热题:两个链表的第一个公共节点

news2024/11/19 2:31:36

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:两个链表的第一个公共节点
    • 题目链接:
    • 方法一:哈希
      • 思路
      • 代码
      • 复杂度
    • 方法二:
      • 思路
      • 代码
      • 复杂度

牛客热题:两个链表的第一个公共节点

题目链接:

两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com)

方法一:哈希

思路

  • 对第一个链表的所有节点都插入到哈希表
  • 紧接着遍历第二个链表,当判断遍历的节点哈希表中存在过
  • 那么我们就认为这是公共链表的第一个节点。否则,则认为没有公共节点

代码

    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) 
	{
		if(pHead1 == nullptr || pHead2 == nullptr) return nullptr;
		unordered_set<ListNode*> hash;
		ListNode* p1 = pHead1;
		while(p1 != nullptr)
		{
			hash.insert(p1);
			p1 = p1->next;
		}
		ListNode* p2 = pHead2;
		while(p2 != nullptr)
		{
			if(hash.count(p2)) return p2;
			p2 = p2->next;
		}

		return nullptr;
    }

复杂度

时间复杂度:O(N) ,遍历了两个链表

空间复杂度:O(N) ,创建了一个哈希表用于存储第一个链表的节点

方法二:

思路

使用两个指针N1,N2,一个从链表1的头节点开始遍历,我们记为N1,一个从链表2的头节点开始遍历,我们记为N2。

让N1和N2一起遍历,当N1先走完链表1的尽头(为null)的时候,则从链表2的头节点继续遍历,同样,如果N2先走完了链表2的尽头,则从链表1的头节点继续遍历,也就是说,N1和N2都会遍历链表1和链表2。

因为两个指针,同样的速度,走完同样长度(链表1+链表2),不管两条链表有无相同节点,都能够到达同时到达终点。

(N1最后肯定能到达链表2的终点,N2肯定能到达链表1的终点)。

所以,如何得到公共节点:

  • 有公共节点的时候,N1和N2必会相遇,因为长度一样嘛,速度也一定,必会走到相同的地方的,所以当两者相等的时候,则会第一个公共的节点
  • 无公共节点的时候,此时N1和N2则都会走到终点,那么他们此时都是null,所以也算是相等了。

代码

    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) 
	{
		if(pHead1 == nullptr || pHead2 == nullptr) return nullptr;
		ListNode* p1 = pHead1;
		ListNode* p2 = pHead2;
	
		while(p1 != p2)
		{
			p1 = (p1 == nullptr) ? pHead2 : p1->next;
			p2 = (p2 == nullptr) ? pHead1 : p2->next;
		}

		return p1;
    }

复杂度

时间复杂度:O(M + N), 其中M和N为链表的长度

空间复杂度:O(1), 使用了常数个变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1642374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】进程的隔离和控制:namespace 隔离、cgroup 控制

文章目录 五、namespace 隔离dd -- 读取、转换并输出数据mkfs -- 格式化文件系统df -- 显示文件系统磁盘使用情况mount -- 加载文件系统到指定的加载点unshare -- 创建子进程&#xff0c;同时与父程序不共享namespace一个 demo 六、cgroup(Control Group) 相关命令pidstat -- 监…

中药辨别二

声明&#xff1a;参考懒兔子公益课&#xff0c;参考网络资料和部分网络图片整理而成&#xff0c;仅供学习使用&#xff0c;不提供商业活动价值&#xff0c;文章描述的中药仅供学习&#xff0c;请在专业医师或专业医生指导下使用药材&#xff0c;擅自或其他情况下使用&#xff0…

使用Python实现二维码生成工具

二维码的本质是什么&#xff1f; 二维码本质上&#xff0c;就是一段字符串。 我们可以把任意的字符串&#xff0c;制作成一个二维码图片。 生活中使用的二维码&#xff0c;更多的是一个 URL 网址。 需要用到的模块 先看一下Python标准库&#xff0c;貌似没有实现这个功能的…

2024网络安全面试问题宝典(4万字)

2024网络安全厂商面试问题宝典(4万字) 目录 评分标准网络基础问题 TCP建立连接要进行3次握手&#xff08;syn-syn&#xff0c;ack-ack&#xff09;&#xff0c;而断开连接要进行4次&#xff08;fin-ack-fin-ack&#xff09;TCP&#xff0c;UDP区别&#xff1a;安全常用的协议…

ZFile-开源在线网盘(列目录)程序,可以将你各个存储类型的存储源,统一到一个网页中查看、预览、维护

ZFile 是什么&#xff1f; ZFile 是一个适用于个人的在线网盘(列目录)程序&#xff0c;可以将你各个存储类型的存储源&#xff0c;统一到一个网页中查看、预览、维护&#xff0c;再也不用去登录各种各样的网页登录后管理文件&#xff0c;现在你只需要在 ZFile 中使用。你只需要…

排序算法之堆排序

首先在了解堆排序之前我们先来回顾一下什么叫做堆吧&#xff01; 基本概念 堆&#xff08;Heap&#xff09;&#xff1a;是一种特殊的完全二叉树&#xff0c;其中每个节点的值都大于或等于&#xff08;大顶堆&#xff09;或小于或等于&#xff08;小顶堆&#xff09;其子节点的…

Vue 组件间的数据绑定

在Vue组件中&#xff0c;v-model指令可以用来实现双向数据绑定。它用于将组件的属性和父组件中的数据进行双向绑定&#xff0c;使得当属性的值改变时&#xff0c;父组件中的数据也会相应地改变&#xff0c;并且当父组件中的数据改变时&#xff0c;属性的值也会相应地改变。 目…

国内各种免费AI聊天机器人(ChatGPT)推荐(中)

作者主页&#xff1a;点击&#xff01; 国内免费AI推荐(ChatGPT)专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月29日15点20分 随着人工智能技术的不断发展&#xff0c;AI聊天机器人已经逐渐融入我们的日常生活。它们可以提供各种服务&#xff0c;例如聊天、…

python爬虫实战

import requests import json yesinput(输入页数&#xff1a;) yesint(yes)headers {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q0.9","content-type": "application/json",…

文件同步--Resilio Sync

近期有很多文本处理工作&#xff0c;每次通过社交软件发来发去&#xff0c;比较麻烦&#xff0c;还是希望能够自动同步&#xff0c;方便快捷&#xff0c;然后师弟就给我推荐了Resilio Sync&#xff0c;目前配置完毕&#xff0c;使用下来感受良好&#xff0c;mark一下。 特点 跨…

喝汽水问题

问题描述&#xff1a; 喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff08;编程实现&#xff09;。解题思路&#xff1a; 变量解释&#xff1a;money总金额数&#xff0c;price汽水单价&#xff0c;excha…

环形列表 题目分析

一、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二、思路 1.使用快慢指针&#xff0c;快指针一次走两步&#xff0c;慢指针一次走一步&#xff0c;二者相对速度为1 2.当慢指针刚好进入环时&#xff0c;设二者的相对距离为N 3.如果链表中存在环&#xff…

智能私信神器,转化率飙升的秘密!

在当今信息爆炸的时代&#xff0c;企业和商家面临着巨大的竞争压力&#xff0c;如何有效地吸引潜在客户、提高客户转化率成为摆在每一位市场营销人员面前的难题。随着人工智能技术的不断发展&#xff0c;智能私信软件应运而生&#xff0c;为企业提供了一个高效、便捷的解决方案…

【OpenNJet下一代云原生之旅】

OpenNJet下一代云原生之旅 1、OpenNJet的定义OpenNJet架构图 2、OpenNJet的特点性能无损动态配置灵活的CoPilot框架支持HTTP/3支持国密企业级应用高效安全 3、OpenNJet的功能特性4、OpenNJet的安装使用编译安装配置yum源创建符号连接修改配置编译 5、通过 OpenNJet 部署 WEB SE…

[CISCN 2018]sm

目录 1.题目 3.解题 4.参考 1.题目 题目链接 from Crypto.Util.number import getPrime,long_to_bytes,bytes_to_long from Crypto.Cipher import AES import hashlib from random import randint def gen512num():order[]while len(order)!512:tmprandint(1,512)if tmp n…

探索小猪APP分发平台:构建高效的应用推广之路

在当今快速发展的移动互联网时代探索小猪APP分发平台&#xff1a;构建高效的应用推广之路&#xff0c;应用分发成为连接开发者与用户的关键桥梁。一个高效的分发平台可以显著提升应用的可达性和用户增长速度。 小猪app分发zixun.ppzhu.net 引言&#xff1a;小猪APP分发平台简介…

Spring AI 抢先体验,5 分钟玩转 Java AI 应用开发

作者&#xff1a;刘军 Spring AI 是 Spring 官方社区项目&#xff0c;旨在简化 Java AI 应用程序开发&#xff0c;让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。 Spring Cloud Alibaba AI 以 Spring AI 为基础&#xff0c;并在此基础上提供阿里云通义系列大模…

远程桌面报错:【出现验证错误。要求的函数不受支持】

WinR 输入【gpedit.msc】回车 依次打开 计算机配置----管理模板-----系统-----凭据分配---加密数据库修正 选择【已启用】&#xff0c;下拉菜单选择【易受攻击】

phpMyAdmin增加自定义IP登录教程

phpMyAdmin增加自定义IP登录教程 1、打开phpMyAdmin目录&#xff0c; 在此目录下是否有config.sample.inc.php文件&#xff0c;如果存在&#xff0c;那么将其改名为config.inc.php&#xff08;为避免修改失误所造成的损失&#xff0c;强烈建议先备份config.sample.inc.php文件…

笔记85:如何计算递归算法的“时间复杂度”和空间复杂度?

先上公式&#xff1a; 递归算法的时间复杂度 递归次数 x 每次递归消耗的时间颗粒数递归算法的空间复杂度 递归深度 x 每次递归消耗的内存空间大小 注意&#xff1a; 时间复杂度指的是在执行这一段程序的时候&#xff0c;所花费的全部的时间&#xff0c;即时间的总和而空间复…