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

链表篇: 04-寻找两个链表的第一个公共结点

解题思路:

方案一:长度统计法

从题目中可以看到,两个链表有长度差,这里可以先让长度比较长的链表先把长度差走完,这里假设为 pHead1, 先让 pHead1 把长度差走完,之后让两个链表同时往后进行遍历,最后当两个链表的值相等时,就直接返回

import java.util.*;
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
public class Solution {public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {// 方案一 长度统计法pHead1 = this.getNode(pHead1,pHead2);return pHead1;}/**长度统计法长度统计法的思路就是让两个链表分别走,长度差然后在判断两个链表的节点是否相等?如果相等 则直接返回*/public ListNode getLengthSum(ListNode pHead1, ListNode pHead2) {int p1 = this.getLength(pHead1);int p2 = this.getLength(pHead2);if (p1 > p2) {for (int i = 0; i < p1 - p2; i++) pHead1 = pHead1.next;} else {for (int i = 0; i < p2 - p1; i++) pHead2 = pHead2.next;}while ((pHead1 != null) && (pHead2 != null) && (pHead1.val != pHead2.val)) {pHead1 = pHead1.next;pHead2  = pHead2.next;}return pHead1;}/**获取链表的长度*/public int getLength(ListNode pHead) {int n = 0;while (pHead != null) {pHead = pHead.next;n++;}return n;}}

方案二:双指针连接法

第二种方案是,需要两个指针 p1,p2 先去让p1 遍历 pHead1,让 p2遍历 pHead2,当p1遍历完毕之后重新遍历pHead2,反之 p2 则取遍历 pHead1 然后,当两个遍历再某个节点时,遇到了相同的值,那么后续的节点就是链表的相同部分。

这里假设 pHead1的长度是 x, pHead2的长度是 y。 公共部分部分的长度是 z。那么 p1,p2走过的长度都是 x+y+z ,所一定会在某个地方值是一样的。此时这个节点就是第一个公共节点。

import java.util.*;
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
public class Solution {public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {// 方案一 双指针连接法// pHead1 = this.getNode(pHead1, pHead2);return pHead1;}/**双指针连接法*/public ListNode getNode(ListNode pHead1, ListNode pHead2) {if (pHead1 == null || pHead2 == null) {return null;}ListNode p1 = pHead1;ListNode p2 = pHead2;while (p1 != p2) {p1 = p1 == null ? pHead2 : p1.next;p2 = p2 == null ? pHead1 : p2.next;}return p1;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [极客大挑战 2019]BuyFlag1
  • A+B V2 51Nod - 3415
  • 实验4-1-7 特殊a串数列求和
  • python 中的 join()
  • 【第二章】软件开发生命周期-瀑布模型:详细解析与案例分析
  • python使用venv生成虚拟环境
  • Flink DataStream API编程入门
  • 立项技术路线选择
  • CVE-2023-33440~文件上传[春秋云境靶场渗透]
  • ffmpeg 的内存分配架构
  • 模型优化学习笔记—动量梯度下降
  • 微软蓝屏事件揭示的网络安全深层问题与未来应对策略
  • 【Unity】web gl inputFied 中文输入,同时支持TextMeshInputFied,支持全屏
  • Redis过期键的删除策略
  • 【数据结构】栈和队列(c语言实现)(附源码)
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 《Java编程思想》读书笔记-对象导论
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • bootstrap创建登录注册页面
  • Docker下部署自己的LNMP工作环境
  • ES6系统学习----从Apollo Client看解构赋值
  • isset在php5.6-和php7.0+的一些差异
  • javascript 哈希表
  • log4j2输出到kafka
  • React-Native - 收藏集 - 掘金
  • React组件设计模式(一)
  • Vue实战(四)登录/注册页的实现
  • Webpack入门之遇到的那些坑,系列示例Demo
  • windows下如何用phpstorm同步测试服务器
  • 彻底搞懂浏览器Event-loop
  • 聊聊hikari连接池的leakDetectionThreshold
  • 区块链分支循环
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 自制字幕遮挡器
  • nb
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #define、const、typedef的差别
  • #职场发展#其他
  • (20050108)又读《平凡的世界》
  • (libusb) usb口自动刷新
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计高校学生选课系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (理论篇)httpmoudle和httphandler一览
  • (十八)三元表达式和列表解析
  • (十一)手动添加用户和文件的特殊权限
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (五)c52学习之旅-静态数码管
  • (轉)JSON.stringify 语法实例讲解
  • (状压dp)uva 10817 Headmaster's Headache
  • .helper勒索病毒的最新威胁:如何恢复您的数据?