LeetCode Intersection of Two Linked Lists (找交叉点)
2024-08-27 06:42:29
题意:
给两个链表,他们的后部分可能有公共点。请返回第一个公共节点的地址?若不重叠就返回null。
思路:
用时间O(n)和空间O(1)的做法。此题数据弱有些弱。
方法(1)假设两个链表A和B,用两个指针分别按顺序遍历AB和BA,这AB和BA肯定等长的。如果他们有公共点,那么按照这样走必定会在某个点相遇。所以只要预先判断是否有公共点,这只需要用两个指针分别指向A和B的链尾判断是否相同即可(这一步可以使用更简单的方法,增加1个计数器,判断指针1是否已经遍历过AB了)。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *L1=headA;
ListNode *L2=headB;
//若无交点,且AB等长,那么他们会在null处相遇,退出。
//先判断是否有交点先。
while(L1&&L1->next) L1=L1->next;
while(L2&&L2->next) L2=L2->next;
if(L1!=L2) return NULL;
L1=headA;
L2=headB;
while(L1!=L2)
{
if(L1) L1=L1->next;
else L1=headB; if(L2) L2=L2->next;
else L2=headA;
}
return L1;
}
};
AC代码
方法(2)先统计链A和B的长度,假设A长,那么指针1先走|A|-|B|步,然后再同时走,若有公共点必定会相遇。
最新文章
- ThinkPHP3快速入门教程二:数据CURD
- 通过Robocopy+DOS 命令+Windows排程实现自动备份(将特定文件/目录备份至自动创建的以年月日命名的目标目录)
- vm中centos7配置静态ip访问外网
- DNX/ASP.NET 5的xUnit入门向导
- Win10 + VS2015 下编译 Qt5.6.0
- ExtJS组件的xtype属性列表
- VC5509的通用GEL代码
- MySQL数据库能够用随意ip连接訪问的方法
- 数据库连接字符串大全 资料引用:http://www.knowsky.com/339545.html
- MySQL Online DDL 工具之pt-online-schema-change
- 当LinkButton无效时,光标不显示为手型
- HTML块
- WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?
- 用百度API实现热(WIFI)、GPS、基站定位
- 前端到后台ThinkPHP开发整站(7)
- [bzoj4236]JOIOJI
- JS-词法作用域 作用域链
- visual studio 2013的使用和单元测试
- 11:HTML5 发展史
- (1.14)mysql锁问题之MyIsam
热门文章
- Keil V4.72升级到V5.1X之后
- EXTJS 4.2 日期控件
- easy ui datagrid 数据绑定
- Hibernate从入门到精通(六)一对一双向关联映射
- springmvc整合redis架构搭建实例
- 【BZOJ 1009】 [HNOI2008]GT考试
- bnuoj 1071 拼图++(BFS+康拓展开)
- [转载]自定义ASP.NET MVC Html辅助方法 TagBuilder
- 【leetcode】4Sum(middle)
- SaaS系列介绍之十: SaaS的商业模式