LeetCode OJ 160. Intersection of Two Linked Lists
2024-08-25 22:12:51
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。代码如下:
/**
* 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) {
ListNode p1 = headA, p2 = headB;
int len1 = 0, len2 = 0;
while (p1 != null) { //求链表A的长度
p1 = p1.next;
len1++;
}
while (p2 != null) { //求链表B的长度
p2 = p2.next;
len2++;
}
p1 = headA;
p2 = headB;
if (len1 > len2) { //计算链表长度的差值并在较长的链表上向后移动|len1-len2|
for (int i = 0;i < len1 - len2; i++) {
p1 = p1.next;
}
} else {
for (int i = 0;i < len2 - len1; i++) {
p2 = p2.next;
}
}
while (p1 != p2) { //向后遍历链表A和链表B,找到相交的节点,若遍历到最后,返回null
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
}
最新文章
- 移动web之用CSS样式写如苹果手机的开关键
- python-函数中定义可变参数
- javaScript判断鼠标滚轮的上下滚动
- python: 生成guid
- 剑指offer--面试题13
- 一个P2P点播直播开源项目:P2PCenter
- 配置Ubuntu开发环境
- linux系统调用和库函数调用的区别(转)
- 从无到有<;前端异常监控系统>;落地
- jacascript DOM节点——元素节点、属性节点、文本节点
- bmob云代码中生成缩略图
- 第三章:shiro授权认证
- 数据转换失败 java.math.BigDecimal cannot be cast to java.lang.String
- 利用Sklearn实现加州房产价格预测,学习运用机器学习的整个流程(包含很多细节注解)
- SQL Server中sp_spaceused统计数据使用的空间总量不正确的原因
- jQuery UI 拖拽-拉伸
- net 串口通讯 网口通讯(Socket)
- Maven Source Plugin
- innerHTML、innerText、outerHTML、textContent的区别
- MFC多国语言——资源DLL
热门文章
- ubuntu 16.04下搭建web服务器(MySQL+PHP+Apache) 教程
- Excel 文件转 JSON格式对象
- 【转】母函数(Generating function)详解 &mdash; TankyWoo(红色字体为批注)
- Link方式导入java项目
- android自定义控件(理论知识学习 +自定义属性的讲解)
- HDU 2601 An easy problem
- hdu1010
- 手动新建MVC控制器和视图,以及数据显示的问题
- HDU 1335 Basically Speaking(进制转换)
- JS+CSS简单实现DIV遮罩层显示隐藏