LeetCode OJ 160. Intersection of Two Linked Lists

Write a program to find the node at which the intersection of two singly linked lists begins.

 

For example, the following two linked lists:

A:          a1 → a2↘c1 → c2 → c3↗            
B:     b1 → b2 → b3

begin to intersect at node c1.

 

Notes:

  • If the two linked lists have no intersection at all, return null.
  • The linked lists must retain their original structure after the function returns.
  • You may assume there are no cycles anywhere in the entire linked structure.
  • Your code should preferably run in O(n) time and use only O(1) memory.

这个题目是要找出两个链表的交叉点,该如何解决呢?如果两个链表相交,我们从A链表出发移动一段距离alen,出B列表出发移动一段距离blen,那么会发现他们指向同一个节点c1。那么这个距离是多少呢?

我们把每一个链表看成两段,不相交的一段和相交的一段。相交的一段对于两个链表长度是一样的,不想交的一段链表的长度是不同的。如果我们分别计算出两个链表的长度,然后计算他们长度的差值f,然后在较长的链表上先移动距离f,再同时从A,B链表出发开始遍历,若发现他们指向同一个节点,则他们相交并返回相交的点,若他们不想交,则会遍历到链表的尾部,则返回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         ListNode p1 = headA, p2 = headB;
15         int len1 = 0, len2 = 0;
16         while (p1 != null) {    //求链表A的长度
17             p1 = p1.next;
18             len1++;
19         }
20         while (p2 != null) {    //求链表B的长度
21             p2 = p2.next;
22             len2++;
23         }
24         p1 = headA;
25         p2 = headB;
26         if (len1 > len2) {      //计算链表长度的差值并在较长的链表上向后移动|len1-len2|
27             for (int i = 0;i < len1 - len2; i++) {
28                 p1 = p1.next;
29             }
30         } else {
31             for (int i = 0;i < len2 - len1; i++) {
32                 p2 = p2.next;
33             }
34         }
35         while (p1 != p2) {      //向后遍历链表A和链表B,找到相交的节点,若遍历到最后,返回null
36             p1 = p1.next;
37             p2 = p2.next;
38         }
39         return p1;
40     }
41 }

 

转载于:https://www.cnblogs.com/liujinhong/p/5386115.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控mysql业务数据分析_MySQL数据库监控指标之执行性能总结

查询性能MySQL 用户监控查询延迟的方式有很多&#xff0c;既可以通过 MySQL 内置的指标&#xff0c;也可以通过查询性能模式。从 MySQL 5.6.6 版本开始默认启用&#xff0c;MySQL 的 performance_schema 数据库中的表格存储着服务器事件与查询执行的低水平统计数据。1、perform…

redis集群关闭 启动报错_使用虚拟机搭建 Redis 集群,实现数据库的负载均衡功能。...

实操题目:使用虚拟机搭建 Redis 集群&#xff0c;实现数据库的负载均衡功能。并使用图文描述整个过程。先创建集群:①创建集群需要使用ruby脚本,所以要先安装ruby环境 安装ruby环境:yum install ruby 安装ruby的包管理器:yum install rubygems②进入到redis的安装目录下的 src …

转载:Java编程风格与命名规范整理

转载自&#xff1a;传送门 不想复制&#xff0c;点进去看喽23333333转载于:https://www.cnblogs.com/Dumblidor/p/5394390.html

[转]完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

HTML5的语义化标签以及属性&#xff0c;可以让开发者非常方便地实现清晰的web页面布局&#xff0c;加上CSS3的效果渲染&#xff0c;快速建立丰富灵活的web页面显得非常简单。 HTML5的新标签元素有&#xff1a; <header> 定义页面或区段的头部&#xff1b; <footer&…

mysql change index_MySQL · 引擎特性 · Innodb change buffer介绍

前言在前面几期月报我们介绍了undo log、redo log以及InnoDB如何崩溃恢复来实现数据ACID的相关知识。本期我们介绍另外一种重要的数据变更日志&#xff0c;也就是InnoDB change buffer。 Change buffer的主要目的是将对二级索引的数据操作缓存下来&#xff0c;以此减少二级索引…

获取当前日期时间并格式化 - 常见格式

获取系统当前日期时间的方法&#xff1a; 1 //获取系统当前日期时间2 Date.prototype.format function (format) {3 var o {4 "M": this.getMonth() 1, //month5 "d": this.getDate(), //day6 "h": this.getHour…

dncnn图像去噪_一种基于DnCNNs改进的图像降噪方法与流程

本发明涉及图像处理技术领域&#xff0c;具体涉及一种基于dncnns改进的图像降噪方法。背景技术&#xff1a;随着科技进步&#xff0c;新的图像技术在逐渐推广&#xff0c;在日常生活中人们对于图像的要求也越来越高&#xff0c;针对阴天或夜晚等弱光条件下拍摄的图像具有噪点较…

fan怎么写 jin_拼音为fan的字

7画匥匥fn ㄈㄢˊ◎古同“笲”。3画凡凡fn ㄈㄢˊ1、平常的&#xff0c;不出奇的&#xff1a;平凡。凡庸。凡夫俗子。2、指人世间(宗教或迷信的说法)&#xff1a;凡尘。凡心。3、所有的&#xff1a;凡年满十八岁的公民&#xff0c;都有选举权与被选举权。凡是。4、总共&#xf…

Linux 挂载命令 --mount

1.挂载光盘命令 mount : mount [-t vfstype] [-o options] device dir mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点 -t 指定挂载的文件系统类型&#xff0c;ext3,ext4,iso9660(光盘的文件类型)f等类型 -o 指定额外的挂载选项 卸载光盘命令 umount 设备文件名或挂…

ios view添加上边框_iOS开发之如何给View添加指定位置的边框线详解

本文主要给大家介绍了关于iOS如何给View添加指定位置边框线的相关内容&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧。略微封装了一下&#xff0c;给View添加指定位置的边框线&#xff0c;其中位移枚举的使用询问了哥们儿&…

mfc 设置子窗口只打开一遍_MFC 判断子窗体是不是已经打开,避免重复创建

MFC 判断子窗体是否已经打开&#xff0c;避免重复创建在主窗体中&#xff0c;嵌入一个很多个子窗体&#xff0c;但是&#xff0c;每次只显示一个。我的做法是&#xff0c;首先在主窗体头文件中定义子窗体对象&#xff0c;然后在单击显示按钮的时候&#xff0c;先判断子窗体是否…

【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞

2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 70 Solved: 24[Submit][Status][Discuss]Description Abstinence岛上的居民很喜欢饮用纯酿的啤酒。迄今为止&#xff0c;他们都是从波兰进口啤酒&#xff0c;自己不生产。但今年岛上的一个城市决定…

python以下导入包的格式错误的是_ICMP python上的错误数据包

如何创建帧icmp我在python上标记格式错误的包导入套接字&#xff0c;结构&#xff0c;uuid&#xff0c;子进程&#xff0c;fcntl&#xff0c;time&#xff0c;random列表项from binascii import hexlify&#xff0c;unexlify from datetime导入datetimetarRed原始输入(Ingrese …

win7/8/10安装过程中将动态磁盘转为basic

在分区界面运行ShiftF10在命令窗口运行Diskpartlist diskpartselect disk n(n为磁盘号)cleanconvert xxxPS:xxx代表要转换的结果。基本类型&#xff1a;Basic&#xff1b;动态类型&#xff1a;dynamic&#xff1b;MBR磁盘&#xff1a;MBR&#xff1b;GPT磁盘&#xff1a;GPT转载…

2016年4月 之 《C程序设计语言》

C程序设计语言 转载于:https://www.cnblogs.com/maoxiaowai/p/5404308.html

python绘画音频_人工智能下的音频还能这样玩!!!!

人工智能音频处理库—librosa(安装与使用)序言一、libsora安装pypicondasource二、librosa常用功能核心音频处理函数音频处理频谱表示幅度转换时频转换特征提取绘图显示三、常用功能代码实现读取音频提取特征提取Log-Mel Spectrogram 特征提取MFCC特征绘图显示绘制声音波形绘制…

保存到数据库乱码mysql_Linux下MySQL保存进去数据为乱码的解决办法

MySQL默认的字符编码是latin1,而我用的是utf-8,存入数据库就变成了?????这样的乱码&#xff0c;解决方法&#xff1a;1、windows下:修改my.ini文件&#xff0c;有两处default-character-setlatin1都改为default-character-setutf8重启既可。2、linux下&#xff1a;vi /etc…

Oracle创建表_01

1、 --创建表 create table zctest( id number(9) not null primary key, classname varchar2(40) not null) 2、 3、 转载于:https://www.cnblogs.com/dbskill/p/5407146.html

mySQL数据库中的备份代码_MySQL中的备份数据库

我目前正在学习SQL。我在windows 10-cmd上运行mysql 8.0.16cli,我以root mysql用户身份登录,并以管理员身份运行cmd。我想做的是备份我新创建的数据库。这是我的显示数据库输出:mysql> show databases;--------------------| Database |--------------------| information_s…

网页版四则运算(未全部完成)

这次作业一直在做&#xff0c;一直在拖着&#xff0c;总感觉心里亏欠点什么&#xff0c;但是人就是这样&#xff0c;一件事情本来做起来就没有太多成功的几率&#xff0c;就想着延长工期&#xff0c;那就一直拖着吧&#xff0c;拖得时间越久你就会越发清晰地意识到自己已经非常…