[LeetCode系列] 双单链表共同节点搜索问题
找到两个单链表的共同节点.
举例来说, 下面两个链表A和B:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
共同节点为c1.
分析:
共同节点距离A,B的起点headA, headB的距离差为定值, 等于它们的各自总长的差值, 我们只需要求出这个差值, 把两个链表的头移动到距离c1相等距离的起点处即可.
代码:
/**
* 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) {
int deltaLength = getLengthOfList(headA) - getLengthOfList(headB);
// A > B
if (deltaLength > )
{
while (deltaLength-- > ) headA = headA->next;
}
// A < B
else if (deltaLength < )
{
while (deltaLength++ < ) headB = headB->next;
}
// now A and B has the same distance to intersection node
while (NULL != headA && NULL != headB)
{
if (headA == headB)
return headA;
headA = headA->next;
headB = headB->next;
}
return NULL;
} int getLengthOfList(ListNode *head)
{
int res = ;
while (NULL != head)
{
res++;
head = head->next;
}
return res;
}
};
[LeetCode系列] 双单链表共同节点搜索问题的更多相关文章
- C语言实现单链表(带头节点)
		
C语言在实现单链表存储时需要注意的几点: 1.定义结构体,typedef:用于给结构体另命名 // 定义结构体类型 typedef struct Node{ int data; struct Node ...
 - 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
		
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
 - 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
		
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...
 - 删除单链表节点,时间复杂度为O(1)
		
一个编程练习,删除单链表一个节点,且时间复杂度控制在O(1)内. 1.核心操作代码如下: struct ListNode { int m_data; ListNode *m_pNext; }; voi ...
 - Java带头节点单链表的增删合并以及是否有环
		
带头节点单链表 1.优势: 1)当链表为空时,指针指向头结点,不会发生null指针异常 2)方便特殊操作(删除第一个有效节点或者插入一个节点在表头) 3)单链表加上头结点之后,无论单链表是否为空,头指 ...
 - 单链表之C++实现
		
在实现单链表时要注意对单链表的逻辑存储.物理存储有清晰的概念. 如上图链表已经完成,其逻辑结构如上.当需要对其进行操作,比如插入.删除,通常需要引 入指针,如上的ptr1.ptr2.在编程时一定要注意 ...
 - "《算法导论》之‘线性表’":基于指针实现的单链表
		
对于单链表的介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1. 单链表介绍 单向链表(单链表)是链表的一种,它由节点组成,每个节点都包含下一个节点的指针. ...
 - 单链表-Python实现-jupyter->markdown 格式测试
		
单链表引入 顺序表 理解Python变量的本质: 变量存储的不是值,是值的地址 理解Python的 "="表示的是指向关系 案例: 交换a,b的值, a=10, b=20 a, b ...
 - c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)
		
线性表 定义:线性表是具有相同特性的数据元素的一个有限序列 类型: 1:顺序存储结构 定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构 算法: #include <stdio. ...
 
随机推荐
- linux进程原语之fork()
			
一.用法解析: fork()这个函数,可以说是名如其人了,众所周知fork这个单词本意为叉子,老外取学术名字的时候总会有一些象形的想法,于是就有了下图~ fork()函数是计算机程序设计中的分叉函数. ...
 - UI线程和工作者线程
			
本文转载于:http://blog.csdn.net/libaineu2004/article/details/40398405 1.线程分为UI线程和工作者线程,UI线程有窗口,窗口自建了消息队列, ...
 - hdu-6324-博弈
			
Problem F. Grab The Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Ja ...
 - django - html
			
1.注释 单行注释: {# #} 多行注释: {%comment%} {%endcomment%} 2.访问元组 不用t[0],要用t.0. 例: {% for t in text %} {{t.0 ...
 - SSH 反向代理
			
SSH反向代理 被控制端没有NAT或者没有静态公网IP,把本端一台服务器映射到外网给远端SSH进来,建立SSH反向隧道. 先映射本端机器到外网 nat server 2222to22 protoco ...
 - Intel daal4py demo运行过程
			
daal安装(记得先安装anaconda): git clone https://github.com/IntelPython/daal4py.git cd daal4py conda create ...
 - spring boot 学习(八)定时任务 @Scheduled
			
SpringBoot 定时任务 @Scheduled 前言 有时候,我们有这样的需求,需要在每天的某个固定时间或者每隔一段时间让应用去执行某一个任务.一般情况下,可以使用多线程来实现这个功能:在 Sp ...
 - mysql监控利器mysqlmtop部署安装
			
MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统.系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理.最重要是MySQL服务器无需安装任何Agent,只 ...
 - IntentService的用法,对比Service它会按顺序执行,不会像Service一样并发执行。
			
package com.lixu.intentservice; import android.app.Activity; import android.content.Intent; import a ...
 - mysql 索引原理及查询优化 -转载
			
转载自 mysql 索引原理及查询优化 https://www.cnblogs.com/panfb/p/8043681.html 潘红伟 mysql 索引原理及查询优化 一 介绍 为何要有索引? ...