题目:

输入两个链表,找出它们的第一个公共结点。

分析:

先统计两个链表的长度,计算他们的差值,然后将两个链表对齐,再去寻找公共节点即可。

程序:

C++

class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int d1 = ;
int d2 = ;
int d = ;
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
while(p1 != nullptr){
p1 = p1->next;
d1++;
}
while(p2 != nullptr){
p2 = p2->next;
d2++;
}
if(d1 < d2){
d = d2 - d1;
while(d--){
pHead2 = pHead2->next;
}
}
else{
d = d1 - d2;
while(d--){
pHead1 = pHead1->next;
}
}
while(pHead1 != nullptr && pHead2 != nullptr){
if(pHead1 == pHead2){
return pHead1;
}
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
return nullptr;
}
};

Java

public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
int d1 = 0;
int d2 = 0;
int d = 0;
ListNode p1 = pHead1;
ListNode p2 = pHead2;
while(p1 != null){
p1 = p1.next;
d1++;
}
while(p2 != null){
p2 = p2.next;
d2++;
}
if(d1 < d2){
d = d2 - d1;
while(d-- != 0){
pHead2 = pHead2.next;
}
}
else{
d = d1 - d2;
while(d-- != 0){
pHead1 = pHead1.next;
}
}
while(pHead1 != null && pHead2 != null){
if(pHead1 == pHead2){
return pHead1;
}
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
return null;
}
}

剑指Offer-35.两个链表的第一个公共结点(C++/Java)的更多相关文章

  1. 【剑指offer】两个链表的第一个公共结点,C++实现

    原创文章,转载请注明出处! 博客文章索引地址 # 题目 #举例 如果两个单向链表有公共的节点,那么这两个链表从第一个公共结点开始,之后所有结点都是重合的,不可能再出现分叉.拓扑结构如下图所示: # 思 ...

  2. 【Java】 剑指offer(52) 两个链表的第一个公共结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个 ...

  3. Go语言实现:【剑指offer】两个链表的第一个公共结点

    该题目来源于牛客网<剑指offer>专题. 输入两个链表,找出它们的第一个公共结点. Go语言实现: //长度长的先走个长度差,然后ab一起比较后面结点 //长度一样,公共结点可能在首结点 ...

  4. 剑指offer:两个链表的第一个公共结点

    题目描述: 输入两个链表,找出它们的第一个公共结点. 解题思路: 这道题一开始的题意不太理解,这里的公共结点,实际上指结点指相同,在题目不存在结点值相同的不同结点. 1. 最直接的思路是对链表一的每个 ...

  5. 剑指Offer 36. 两个链表的第一个公共结点 (链表)

    题目描述 输入两个链表,找出它们的第一个公共结点. 题目地址 https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tp ...

  6. 【剑指offer】两个链表的第一个公共结点

    一.题目: 输入两个链表,找出它们的第一个公共结点. 二.思路: 思路一:模拟数组,进行两次遍历,时间复杂度O(n2) 思路二:假定 List1长度: a+n  List2 长度:b+n, 且 a&l ...

  7. 《剑指offer》--- 两个链表的第一个公共结点

    本文算法使用python3实现 1. 问题   输入两个链表,找出它们的第一个公共结点.   时间限制:1s:空间限制:32768K 2 思路描述   使用两个指针 $ p1,p2 $ 分别指向两个链 ...

  8. [剑指Offer] 36.两个链表的第一个公共结点

    题目描述 输入两个链表,找出它们的第一个公共结点. [思路]找出两个链表的长度,然后让长的走两个链表的长度差,然后再一起走(因为两个链表用公共的尾部). /* struct ListNode { in ...

  9. 剑指 Offer 52. 两个链表的第一个公共节点 + 链表 + 第一个公共结点 + 双指针

    剑指 Offer 52. 两个链表的第一个公共节点 Offer_52 题目详情 题解分析 可以使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结 ...

  10. 力扣 - 剑指 Offer 52. 两个链表的第一个公共节点

    题目 剑指 Offer 52. 两个链表的第一个公共节点 思路1(栈) 若两个链表相遇,则从它开始相遇的地方到链表末尾应该都是相同的,那么我们可以将两个链表分别放入两个栈中,然后依次循环比较两个栈顶的 ...

随机推荐

  1. MongoDB(二):在Windows环境安装MongoDB

    1. 在Windows环境安装 1.1 MongoDB下载 要在Windows上安装MongoDB,首先打开MongoDB官网:https://www.mongodb.com/download-cen ...

  2. jieba的使用

    1. 分词 分词是自然语言处理中最基础的一个步骤.而jieba分词是中文分词的一个比较好的工具.下面看看可以怎么用jieba进行分词. import jieba # 全模式 seg_list1 = j ...

  3. Linux汇总

    Linux介绍以及VMware和Centos的安装 linux-VMtools安装 linux-创建/使用快照/克隆(类似windows中备份还原) linux目录结构 linux指令大全(归类整理) ...

  4. Java并发J.U.C学习总结

    转载自http://www.cnblogs.com/chenpi/结合自己理解稍有添加自己的理解 阅读目录 JSR 166及J.U.C Executor框架(线程池. Callable .Future ...

  5. Class文件结构-常量池

    常量池里存放:1.字面量(Literal) • 文本字符串 • 声明为final的常量值(final的8种基本类型) • 非final的基本类型也可能进(doublefloatlong)2.符号引用( ...

  6. 三大框架知识点比较(Angular, Vue, React)

    点击左键 => 拖拽图片 => 新标签页查看图片 => 放大拖拽查阅

  7. 10. 函数-lambda函数及高阶函数

    一.匿名函数解析 ​ 关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数.匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. ​ 用匿名函数有 ...

  8. jQuery入门和DOM对象

    jQuery入门和DOM对象 1.开发准备 1. 下载的版本: jquery-3.3.1.min.js :压缩版,发布版84.8KB jquery-3.3.1.js :常规版,开发版265KB 2. ...

  9. 剑指Offer-43.左旋转字符串(C++/Java)

    题目: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcX ...

  10. [译]Vulkan教程(25)描述符布局和buffer

    [译]Vulkan教程(25)描述符布局和buffer Descriptor layout and buffer 描述符布局和buffer Introduction 入门 We're now able ...