两个链表的第一个公共节点分析
示例 1:
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Reference of the node with value = 8
输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
分析:
如果让两个链表a,b,走一个比较一次。如果是同一个结点。能判断是同一个结点吗?
显然的是不能的。为什么不能呢?
这种情况显然是两个链表长度是一样的结果。
可是这里长度是不一样的,有长有短
所以这种我们首先要遍历出,两个单链表的长度。
让长的链表先走几步,走完后,再同时走
这里定义两链表长度lengthA. lengthB;
如何遍历求长度?
通过定义一个函数,来求出两个链表的长度。
然后判断:
1.如果l1长,则让l1走。l1-l2 距离
2.如果l2长,则让l2走。l2-l1距离
当a != b通过循环比较:
两者向后推:
a = a.next; b = b.next;
最后:
return a;
记得返回 如果返回a 则说明没有相交结点 为 null
java代码实现:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {int lengthA = getLength(headA), lengthB = getLength(headB);ListNode a = headA, b = headB;if(lengthA > lengthB){for(int i = 0; i < lengthA - lengthB; i++)a = a.next;} else {for(int i = 0; i < lengthB - lengthA; i++)b = b.next;}while(a != b){a = a.next;b = b.next;}return a; //记得返回 如果返回a 则说明没有相交结点 为 null}private int getLength(ListNode head){int length = 0;//for(int i = 0; head != null; head = head.next, length++);while(head != null){head = head.next;length++;}return length;}}
两个链表的第一个公共节点分析相关推荐
- LeetCode-剑指 Offer 52. 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点 思路一:用set容器,不符合题意 /*** Definition for singly-linked list.* struct ListNode ...
- 【LeetCode】剑指 Offer 52. 两个链表的第一个公共节点
[LeetCode]剑指 Offer 52. 两个链表的第一个公共节点 文章目录 [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点 一.双指针 一.双指针 设 "第一个 ...
- 剑指Offer面试题:31.两个链表的第一个公共节点
一.题目:两个链表的第一个公共节点 题目:输入两个链表,找出它们的第一个公共结点. 链表结点定义如下,这里使用C#语言描述: public class Node{public int key;publ ...
- 剑指 Offer 52. 两个链表的第一个公共节点
题目:剑指 Offer 52. 两个链表的第一个公共节点 ,哈哈,我们今天来看一道很简单的题嘛,这是选自剑指 Offer 上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不 ...
- 数据结构与算法--两个链表中第一个公共节点
链表中第一个公共节点 公节点定义:同一个节点在两个链表中,并不是节点值相同 题目:输入两个节点,找出他们的第一个公共节点,节点定义如需 /*** 链表元素节点** @author liaojiamin ...
- 【Java】剑指 Offer 52. 两个链表的第一个公共节点
题目 :输入两个链表,找出它们的第一个公共节点. 算法思路 : 首先我们要明确,两个链表相交,是Y形状的 两个链表相交,是next域相同 因为两个单链表的长度是不一样的,所以我们需要让长的那个链表,引 ...
- 算法------ 两个链表的第一个公共节点
题目: 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 注意: 如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构. 可假定整个链 ...
- 剑指 Offer 52. 两个链表的第一个公共节点(C语言)
*输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = ...
- 《剑指Offer》52:两个链表的第一个公共节点
题目 输入两个链表,找出它们的第一个公共节点. public static class ListNode{public int val;public ListNode next;public List ...
最新文章
- python使用imbalanced-learn的SMOTETomek方法同时进行上采样和下采样处理数据不平衡问题
- 解析1G到5G技术与设备发展历程
- MySQL—交叉连接、自然连接、内连接
- 显示多文档标签_HTML常用基础标签,前端从入门到精通
- Apache Shiro第3部分–密码学
- 丁香园在语义匹配任务上的探索与实践
- weblogic 启动 startWebLogic.sh
- php替代换行符号,php换行符号替换与过滤例子
- html制作dnf,dnf怎么制作img文件 时装拼合教程
- 什么是servlet技术?如何部署和新建一个servlet?
- MSTAR648方案遥控器配置
- WebSocket通信原理和在Tomcat中实现源码详解(万字爆肝)
- android系统运行缓慢,安卓手机运行速度慢怎么办 手机运行速度慢如何解决 - WiFi共享大师...
- Windows超级管理器 8.72 这一刻,刻不容缓。
- 弗拉基米尔·多罗宁_罗紫琳新欢俄亿万富豪 女星与老外的那些事儿
- 寒假宅喵java学习
- 内存占用少的linux桌面,不同桌面环境占用内存/CPU对比
- 基于SpringBoot生鲜商城
- 一个完整的python文件即是一个模块_README.md
- [运放滤波器]5_滤波器的分类
热门文章
- linux mysql 数据目录迁移后不生效_mysql 本地数据目录迁移
- 《阿里巴巴编码规范(JAVA)》学习认证考后感
- CentOS7下Firewall 开放指定端口
- 构建Docker镜像(三)
- Maven - Dynamic Web Module 3.0 requires Java 1.6 or newer.
- 使用gradle进行开发——环境搭建
- web.xml 常用标签配置(转)
- 游戏开发基础:A*算法(转)
- 安全获取QueryString的值类库下载
- 核弹级漏洞!我把log4j扒给你看!