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

牛客-两个链表的第一个公共节点

1.题目描述

2.题目链接

两个链表的第一个公共结点_牛客题霸_牛客网 

3.代码解答

public class Solution {public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {int len1=0,len2=0,len=0;ListNode cur1=pHead1,cur2=pHead2;if(pHead1==null||pHead2==null){return null;}if(pHead1==pHead2){return pHead1;}while(cur1!=null){len1++;cur1=cur1.next;}cur1=pHead1;while(cur2!=null){len2++;cur2=cur2.next;}cur2=pHead2;if(len1>len2){len=len1-len2;while(len!=0){cur1=cur1.next;len--;}}else if(len1<len2){len=len2-len1;while(len!=0){cur2=cur2.next;len--;}}while(cur1!=null&&cur2!=null){if(cur1==cur2){return cur1;}cur1=cur1.next;cur2=cur2.next;}return null;}
}

4.解题思路

题目要求给出两个链表,找到他们的相交节点并返回该节点。如果两条链表不想交,就返回空值。

我们可以先分别遍历两条链表来得出它们各自的长度

又知,两条链表相互之后,一模一样。长度自然也一样,所有两条链表的长度差只能存在前半部分(两条链表未相交时)。

我们可以先让较长的链表走差值步,这时两条链表剩下的长度一样。再依次移动双指针,直到双指针节点一样,返回该节点

5.代码细节

1)先判断后移动双指针

while(cur1!=null&&cur2!=null){if(cur1==cur2){return cur1;}cur1=cur1.next;cur2=cur2.next;}

如果我们在移动完较长链表的指针后,两条链表已经相交,我们不先判断if条件,就会错过。

http://www.dtcms.com/a/289600.html

相关文章:

  • 安全信息与事件管理(SIEM)系统架构设计
  • TypeScript 中替代 Interface 的方案
  • PLC(可编程逻辑控制器,Programmable Logic Controller)是什么?
  • 详解如何解决Mysql主从复制延迟
  • 脚本代码:网页限制解除(改)
  • 树同构(Tree Isomorphism)
  • 生成模型与判别模型
  • 虚拟机VMware安装国产桌面系统统信UOS
  • Nginx服务器基本搭建
  • 【性能测试】性能压测3个阶段+高频面试题回答(详细)
  • 大语言模型:人像摄影的“达芬奇转世”?——从算法解析到光影重塑的智能摄影革命
  • 机器学习基础:从数据到智能的入门指南
  • 【数据集】NOAA 全球监测实验室(GML)海洋边界层(MBL)参考简介
  • 渗透笔记(XSS跨站脚本攻击)
  • 【算法300】:栈02
  • Day25| 491.递增子序列、46.全排列、47.全排列 II、回溯总结
  • JAVA面试宝典 -《API设计:RESTful 与 GraphQL 对比实践》
  • Error: You don‘t have permission to access that port.当端口被莫名占用时,kill它!
  • G1回收器垃圾回收过程
  • 30天打牢数模基础-卷积神经网络讲解
  • 将来职业从事股票市场投资工作,应该做什么?
  • Python趣味算法:借书方案知多少 | 排列组合穷举法详解
  • DeepSeek+LoRA微调大模型实战
  • 【机器学习深度学习】魔塔社区模型后缀全解析:Base、Chat、Instruct、Bit、Distill背后的技术密码
  • 【Java多线程-----复习】
  • InfluxDB 核心概念与发展历程全景解读(二)
  • AtCoder Beginner Contest 415
  • 数控调压BUCK电路 —— 基于TPS56637(TI)
  • 乐观锁实现原理笔记
  • Android activity与service通信的三种方法