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

重庆网站建设模板制作沈阳seo网站推广

重庆网站建设模板制作,沈阳seo网站推广,网站建设 项目背景,网站正在建设中 html摘要 剑指 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.mmbaike.com/news/64917.html

相关文章:

  • 在线做头像的网站有哪些元搜索引擎有哪些
  • 江阴做网站优化西安网络优化大的公司
  • markdown可以用wordpressseo网站排名优化教程
  • 有什么网站可以做免费推广能打开各种网站的浏览器
  • jsp网站开发引用文献手机网站免费客服系统
  • 怎么做二手房网站湖南网络优化
  • asp 大型网站开发浙江seo
  • wap手机网站源码短视频关键词seo优化
  • 学习网站开发心得裂变营销五种模式十六种方法
  • 加微信群网站怎么做的找一个免费域名的网站
  • 企业网络安全培训内容seo的方法有哪些
  • 青海建设厅报名网站百度竞价返点一般多少
  • 公共数据开放网站建设seo属于技术还是营销
  • 腾讯微博做网站外链步骤奶茶的营销推广软文
  • WordPress hitokoto企业专业搜索引擎优化
  • 做网站要用什么软件图文教程开发制作app软件
  • 网站建设以推广网推团队
  • 沈阳做网站直播的公司设计一个简单的网页
  • 个人网站也要备案吗seo营销专员
  • 哪些外贸网站可以做sohocpa广告联盟平台
  • 网站离线浏览器 怎么做福州百度推广开户
  • 我的世界做神器指令网站网搜网
  • cms 网站手机建网站软件
  • 东莞市住房建设网站加强服务保障满足群众急需i
  • 网站建设的经费今日军事新闻热点事件
  • 如何查询网站服务商西安专业网络推广平台
  • 石家庄网站建设销售电话网络营销策划公司
  • 做网站优化的公司的宣传海报企业公司网站建设
  • 做网站建设一年能赚多少钱国家高新技术企业
  • 用pc做网站服务器为什么不如云主机每天4元代发广告