LeetCode160 相交链表(双指针)
题目:
click here!!题目传送门
思路:
1.笨方法
因为如果两个链表相交的话,从相交的地方往后是同一条链表,所以:
分别遍历两个链表,得出两个链表的长度,两个长度做差得到n,然后将长的链表头指针先移动n个结点,然后两个链表再同时移动,如果出现两个链表的指针直到同一个内存地址,说明相交,没有出现指向同一个内存地址的情况就是不相交
class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int lenA = 0,lenB = 0, len = 0;
ListNode tA = headA;
ListNode tB = headB;
while(tA != null){
lenA++;
tA = tA.next;
}
while(tB != null){
lenB++;
tB = tB.next;
}
len = Math.max(lenA,lenB) - Math.min(lenA,lenB);
if(lenA > lenB){
lenA = 0;
while (lenA < len){
headA = headA.next;
lenA++;
}
}else{
lenB = 0;
while (lenB < len){
headB = headB.next;
lenB++;
}
}
while (headA != headB){
headA = headA.next;
headB = headB.next;
if(headA == null || headB==null) return null;
}
return headA;
}
}
2 巧方法
和方法1中一样首先将两个链表的指针之间的长度差消除,这里可以这样来做:
两个链表的指针同时向后移动,在链表A指针移动到表尾的时候令指针指向链表B;链表B指针移动到表尾的时候令指针指向链表A的表头。如果两个链表相交的话,则在较长的链表的指针转向较短链表表头的时候,较短链表的指针已经在长链表上走过两链表的长度差n个节点了,也就是说,现在两个指针处于同一起跑线上。(对着原题目的图走一遍就明白了)
长链表的指针从长链表起步就多走了n个节点,转到短链表上又少走了n个;短链表的指针从短链表起步就少走了n个节点,转到长链表上时,有多走了n个节点,所以两者会同时处于同一起跑线上。
class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null || headB==null) return null;
ListNode pA = headA, pB = headB;
while (pA != pB){
pA = pA==null ? headB : pA.next;
pB = pB==null ? headA : pB.next;
}
return pA;
}
}
LeetCode160 相交链表(双指针)的更多相关文章
- [LeetCode题解]160. 相交链表 | 双指针 + 哈希表
方法一:双指针 解题思路 假设链表存在相交时,headA 的长度为 a + c,headB 的长度为 b + c.如果把 headA 连上 headB,headB 连上 headB 的话,当遍历这两个 ...
- [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- LeetCode160.相交链表
编写一个程序,找到两个单链表相交的起始节点. 例如,下面的两个链表: A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3 在节点 c1 开始相交. 注意: 如果两个 ...
- 【LeetCode题解】160_相交链表
目录 160_相交链表 描述 解法一:哈希表 思路 Java 实现 Python 实现 解法二:双指针(推荐) 思路 Java 实现 Python 实现 160_相交链表 描述 编写一个程序,找到两个 ...
- LeetCode 160: 相交链表 Intersection of Two Linked Lists
爱写Bug(ID:iCodeBugs) 编写一个程序,找到两个单链表相交的起始节点. Write a program to find the node at which the intersectio ...
- LeetCode 160——相交链表(JAVA)
编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...
- leetcode腾讯精选练习之相交链表(六)
相交链表 题目: 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5 ...
- Java实现 LeetCode 160 相交链表
160. 相交链表 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4, ...
- 【LeetCode】Intersection of Two Linked Lists(相交链表)
这道题是LeetCode里的第160道题. 题目讲的: 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, ...
随机推荐
- go笔记(go中的方法调用)
最近接触go语言 发现和java的方法调用有些类似但又有自己的注意点 go的包我理解为则是隔离的最小模块 先在src目录下创建main.go文件 package为main,然后在src下创建mod ...
- Openstack----学习笔记
ceph 分布式存储,用于存放新创建的云主机磁盘镜像文件和磁盘 创建云主机流程记录 简易版本: 上图中所有发送的请求都会存放在rabbit_mq(消息队列)中,各个组件会定时取消息队列中与自己相关的请 ...
- Mark Grover
https://www.ibm.com/developerworks/cn/data/library/bd-zookeeper/
- IDEA导入 Eclipse项目
选址 import 导入项目,选择create..., 下一步...下一步 导入项目后: 点击config 点击OK 然后添加artifacts 即可运行项目. IDEA 添加artifacts 方法 ...
- python3 使用selenium +webdriver打开chrome失败,报错:FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver': 'chromedriver'
提示chrome driver没有放置在正确的路径下 解决方法: 1.chromedriver与chrome各版本及下载地址 驱动的下载地址如下: http://chromedriver.storag ...
- 上篇: php 微信公众号 基于Thinkphp3.2框架开发
说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...
- java swing简介
java应用程序用户界面开发包 Swing是一个用于开发Java应用程序用户界面的开发工具包.它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格.Swing开发人员只用很少 ...
- HTML相关知识点
标签: 块元素:可以设置宽高,div, 行内元素:不可以设置宽高,span,image, display:inline;//转换成行内元素 display:block;//转换成块元素 display ...
- CXL联盟正式成立:成员均是行业巨头
导读 今天,阿里巴巴.思科.戴尔EMC.Facebook.Google.HPE.华为.Intel.微软(按英文首字母排序)联合宣布,CXL联盟(Compute Express Link Consort ...
- body滚动时左侧菜单固定
var top = $(".nav-frame").offset().top $(document).scroll(function(){ if($(this).scrollTop ...