当前位置: 首页 > news >正文

云南网站建设优选平台排超联赛积分榜

云南网站建设优选平台,排超联赛积分榜,中央广播电视总台中国之声,屏蔽阿里云网站摘要 剑指 Offer 52. 两个链表的第一个公共节点 一、双指针解法 使用双指针的方法,可以将空间复杂度降至 O(1)。只有当链表 headA headB都不为空时,两个链表才可能相交。因此首先判断链表 headA和 headB是否为空,如果其中至少有一个链表为…

摘要

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

一、双指针解法

使用双指针的方法,可以将空间复杂度降至 O(1)。只有当链表 headA headB都不为空时,两个链表才可能相交。因此首先判断链表 headA和 headB是否为空,如果其中至少有一个链表为空,则两个链表一定不相交,返回 null。

当链表 headA和 headB 都不为空时,创建两个指针pA 和pB,初始时分别指向两个链表的头节点 headA和 headB,然后将两个指针依次遍历两个链表的每个节点。具体做法如下:

  • 每步操作需要同时更新指针 pA 和 pB。
  • 如果指针 pA不为空,则将指针 pA移到下一个节点;如果指针 pB 不为空,则将指针 pB 移到下一个节点。
  • 如果指针 pA 为空,则将指针 pA移到链表headB 的头节点;如果指针 pB为空,则将指针 pB 移到链表 headA的头节点。
  • 当指针pA 和pB指向同一个节点或者都为空时,返回它们指向的节点或者 null。

package Linklist;import java.util.HashSet;
import java.util.Set;/*** @Classname JZ52两个链表的第一个公共节点* @Description TODO* @Date 2023/2/11 13:39* @Created by xjl*/
public class JZ52两个链表的第一个公共节点 {public class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}// 采用的是双指针的方式ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) {return null;}ListNode pA = headA;ListNode pB = headB;while (pA != pB) {pA = pA == null ? headB : pA.next;pB = pB == null ? headA : pB.next;}return pA;}// 使用的是双指针来实现ListNode getIntersectionNodecpoy(ListNode headA, ListNode headB) {if (headA==null|| headB==null){return null;}ListNode pA=headA;ListNode pB=headB;while (pA!=pB){pA=pA==null?headB:pA.next;pB=pB==null?headA:pB.next;}return pA;}}

复杂度分析

  • 时间复杂度:O(m+n),其中 m 和 n 是分别是链表headA 和 headB 的长度。两个指针同时遍历两个链表,每个指针遍历两个链表各一次。
  • 空间复杂度:O(1)。

 二、哈希集合解法

判断两个链表是否相交,可以使用哈希集合存储链表节点。

  • 首先遍历链表 headA,并将链表 headA中的每个节点加入哈希集合中。然后遍历链表 headB,对于遍历到的每个节点,判断该节点是否在哈希集合中:
  • 如果当前节点不在哈希集合中,则继续遍历下一个节点;
  • 如果当前节点在哈希集合中,则后面的节点都在哈希集合中,即从当前节点开始的所有节点都是两个链表的公共节点,因此在链表 head 中遍历到的第一个在哈希集合中的节点就是两个链表的第一个公共节点,返回该节点。

如果链表 headB中的所有节点都不在哈希集合中,则两个链表不相交,返回 null。

public ListNode getIntersectionNode2(ListNode headA, ListNode headB) {Set<ListNode> visited = new HashSet<ListNode>();ListNode temp = headA;while (temp != null) {visited.add(temp);temp = temp.next;}temp = headB;while (temp != null) {if (visited.contains(temp)) {return temp;}temp = temp.next;}return null;} 

复杂度分析

  • 时间复杂度是O(m+n), m、n分别是链表headA和headB的长度。需要遍历两个链表的各一次。
  • 空间复杂度m,m 是链表 headA的长度。需要使用哈希集合存储链表 headA中的全部节。

博文参考

《Leetcode》

http://www.dt0577.cn/news/37902.html

相关文章:

  • 广州网站开发外包公司企排排官网
  • 怎么用div布局做网站百度的营销推广模式
  • 百石网怎么做网站微信搜一搜怎么做推广
  • 上海的外贸网站建设公司排名山东网页定制
  • asp.net 网站管理工具 遇到错误seo线下培训课程
  • 家庭电脑可以做网站吗学做网站培训班要多少钱
  • 网站备案和域名备案区别seo实战视频
  • 设计企业网站机企业查询
  • 做网站域名的设置seo基础入门教程
  • 建设部勘察设计网站国家职业技能培训官网
  • 360doc 网站怎么做百度竞价账户
  • 网站制作合同网络推广都是收费
  • 有哪个网站可以做兼职sem是什么意思
  • 外贸公司做网站新闻头条最新消息30字
  • 潍坊网站建设优化免费网络推广的方法
  • 58同城租房北京seo课程
  • 天长两学一做网站百度快照在哪里
  • wordpress发布插件优化设计
  • 网站正在建设中亚洲优帮云排名自动扣费
  • 怎么做彩票网站收款人灰色行业怎么推广引流
  • 网站建设套餐怎么样搜索引擎有哪些
  • 动态网站开发期末考试答案seo整站优化方案案例
  • 深圳学校网站建设公司百度图片
  • dede网站模板免费下载自动点击关键词软件
  • 海报素材库网站免费网站推广四个阶段
  • 网站建设环境软件有哪些网络营销模式有哪些
  • 鞍山58同城租房网苏州seo服务
  • 中央政府网站建设管理办法如何联系百度客服
  • 企业网站模板 优帮云合肥做网站哪家好
  • 网站自动收录域名是什么意思