找两个链表第一次指针相同的地方
 
 
想法:(本来是没有的,因为没读懂题目描述= =)
1.两个指针,长的先走(长减短相差的长度)这么多的步数,然后就可以开始比较指针,直到指向为空,期间如果指针相同,返回该节点,如果链表未相交,则返回的是null
 
可是这是链表啊!没法知道长度!!!
 
 
2.hashset
将长链表的元素放入set,从短链表的头部开始,依次向后判断该元素是否在set中,如果是则表明两个链表相交,返回该点,若到最后都没有,则两个链表不相交,返回null
 1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode(int x) {
7 * val = x;
8 * next = null;
9 * }
10 * }
11 */
12 public class Solution {
13 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
14 if(headA == null||headB == null){
15 return null;
16 }
17 Set setList = new HashSet<>();
18 while(headA!=null){
19 setList.add(headA);
20 headA = headA.next;
21 }//将一链表的元素放入set
22 while(headB!=null){
23 if(setList.contains(headB)){
24 return headB;
25 }
26 headB = headB.next;
27 }//从另一链表的头部开始,依次向后判断该元素是否在set中,如果是则表明两个链表相交,返回该点,若到最后都没有,则两个链表不相交,返回null
28 return null;
29 }
30 }
 
3.双指针根据等长原理,指针相遇时返回该点
如果像左边情况一样,两链表相加,长链表长度6,短链表长度4,相交长度2。甲从长链表头开始走,乙从短链表头开始走,甲乙走到空时从另一个链表的头开始走,甲走了4+2+2=乙走了2+2+4,之后甲乙相遇,返回该点,如果向右边情况一样,两个长度不等且不相交的链表,甲走6+3=乙走3+6,之后甲乙相遇,在null,返回null。
 
 
该方法就是:
【
当链表 headA 和 headB 都不为空时,创建两个指针 pA 和 pB,初始时分别指向两个链表的头节点 headA 和 headB,然后将两个指针依次遍历两个链表的每个节点。具体做法如下:
 
每步操作需要同时更新指针 pA 和 pB
如果指针 pA 不为空,则将指针 pA 移到下一个节点;如果指针 pB 不为空,则将指针 pB 移到下一个节点
如果指针 pA 为空,则将指针 pA 移到链表 headB 的头节点;如果指针 pB 为空,则将指针 pB 移到链表 headA 的头节点
当指针 pA 和 pB 相遇时返回该节点。都为空时,返回 null
 
作者:dodo_1202
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
】
 
 
使用for进行一个经过一次指针为空的循环(n<3){
    判断pa pb是否相遇,若相遇返回该点,若不相遇继续下面:
    pa pb向前移动
    if(pa此时为空),则pa移到headb重新开始,中间变量 n+1;
    if(pb此时为空),则pb移到heada重新开始,中间变量 n+1;
}
到了这里说明双链表不相交
返回null
 

Leecode 160.相交链表(Java 哈希表、双指针 两种方法)的更多相关文章

  1. JAVA 集合 List 分组的两种方法

    CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...

  2. java字符串大小写转换的两种方法

    转载自:飞扬青春sina blogjava字符串大小写转换的两种方法 import java.io..* public class convertToPrintString {          pu ...

  3. 多表查询两种方法、可视化软件navicat、python操作mysql、pymysql模块

    目录 多表查询的思路 多表查询的两种方法 小知识点补充数说明 可视化软件Navicat 安装教程 数据库常用操作 多表查询练习题 python 操作MySQL pymysql补充说明 Non-grou ...

  4. mysql 清空表的两种方法

    一.Delete DELETE FROM `table`; 二.Truncate TRUNCATE `table`; 第一种方法其实就是去掉where条件,没有了条件,也就是删除掉表里面的所有记录了: ...

  5. 用python实现九九乘法表输出-两种方法

    2019-08-05 思考过程:九九乘法表需要两层循环,暂且称之为内循环和外循环,因此需要写双层循环来实现. 循环有for和while两种方式. for循环的实现 for i in range(1,1 ...

  6. Java获得键盘输入的两种方法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  7. 如何删除windows服务(sc.exe删除和注册表删除两种方法)

    一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和Windows网络的基础,属于系统核心的一部分,它支持着整个Windows的各种操作. ...

  8. java连接Access数据库的两种方法

    where ziduan  in(select  ziduan from  table) 嵌套 ResultSet rs = pst.executeQuery();List list = new Ar ...

  9. Java导出Excel文件的两种方法

    将数据以Excel表格的形式导出:首先下载poi的jar包,导入项目中,或者使用maven仓库管理,在pom文件添加:<dependency>    <groupId>org. ...

  10. Java遍历文件夹的两种方法(非递归和递归)

    import java.io.File; import java.util.LinkedList; public class FileSystem {    public static int num ...

随机推荐

  1. HTML语言基本标签

    创建一个HTML文档 <html></html> 设置文档标题以及其他不在WEB网页上显示的信息 <head></head> 设置文档的可见部分 < ...

  2. Vue3+vite+Echarts案例大屏可视化--千峰(推荐)

    https://www.bilibili.com/video/BV14u411D7qK?p=33&spm_id_from=pageDriver&vd_source=e2cfe74d93 ...

  3. 关于 verilator 中 config.vlt 等配置文件的使用

    参考网页:https://verilator.org/guide/latest/exe_verilator.html#configuration-files 注意,在使用 config.vlt 配置文 ...

  4. 2357. 使数组中所有元素都等于零 (Easy)

    问题描述 2357. 使数组中所有元素都等于零 (Easy) 给你一个非负整数数组 nums .在一步操作中,你必须: 选出一个正整数 x , x 需要小于或等于 nums 中 最小 的 非零 元素. ...

  5. 转L:[JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)

    [JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇) JVM--Java虚拟机详解

  6. leecode 22 括号生成

    22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合. 示例 1: 输入:n = 3 输出:["((()))"," ...

  7. 记录一次排查OOM的过程

    服务出现了oom: 查看类信息发现char[]类型实例特别多,占用堆内存特别大 跟踪几个char[]实例的GC root,发现都是保存token信息,并且根都是session 然后查看session的 ...

  8. UniCode 下char*转CString ,利用MultiByteToWideChar进行转换,中文乱码的解决方案

    //计算char *数组大小,以字节为单位,一个汉字占两个字节 int charLen = strlen(sText); //计算多字节字符的大小,按字符计算. int len = MultiByte ...

  9. sql文件导入错误,There was an error while executing a query. The query and the error message has been logged at: C:\U

    x.sql转储文件导入异常. 之前成功导入过,再次导入异常. 1修改my.ini文件,2修改sql文件编码.都不适用. 解决方法:新建数据库,再次导入成功.注意编码.

  10. 2020年第11届蓝桥杯C/C++B组 第二轮省赛

    # JJU-干干 试题A :门牌制作[问题描述]小蓝要为一条街的住户制作门牌号.这条街一共有 2020 位住户,门牌号从 1 到 2020 编号.小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符 ...