首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每天一道剑指offer-两个链表的第一个公共结点

每天一道剑指offer-两个链表的第一个公共结点

作者头像
乔戈里
发布于 2019-01-09 03:02:28
发布于 2019-01-09 03:02:28
38800
代码可运行
举报
文章被收录于专栏:Java那些事Java那些事
运行总次数:0
代码可运行

辣条走起,每个月的刷题99元奖励靠大家了

前言

今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。

题目

每天一道剑指offer-两个链表的第一个公共结点

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目详述

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

思路

  • 剑指offer思路,就是分别求两个链表长度,求长度差
  • 长的那个先走长度差个单位
  • 这样两个就同一个起跑线了
  • 然后就是就长的短的一起走,直到节点相同就是第一个公共节点

题目详解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if(pHead1 == null || pHead2 == null)
            return null;
        int length1 = 0;
        int length2 = 0;
        ListNode p1 = pHead1,p2 = pHead2;
        while(p1 != null)
        {
            length1++;
            p1 = p1.next;
        }
        while(p2 != null)
        {
            length2++;
            p2 = p2.next;
        }//分别求两个链表长度
        int cha = 0;
        if(length1 > length2)
        {//求长度差,长的先走长度差个单位
            cha = length1 - length2;
            p1 = pHead1;
            p2 = pHead2;
            for(int i=0;i<cha;i++)
                p1 = p1.next;
        }else{
            cha = length2 - length1;
            p2 = pHead2;
            p1 = pHead1;
            for(int i=0;i<cha;i++)
                p2 = p2.next;
        }
        while(p1 != p2)
        {//找第一个相同的节点
            p1 = p1.next;
            p2 = p2.next;
        }
        return p1;
    }
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[剑指offer] 两个链表的第一个公共结点
如果两个链表存在公共结点,那么它们从公共结点开始一直到链表的结尾都是一样的,因此我们只需要从链表的结尾开始,往前搜索,找到最后一个相同的结点即可。但是题目给出的单向链表,我们只能从前向后搜索,这时,我们就可以借助栈来完成。先把两个链表依次装到两个栈中,然后比较两个栈的栈顶结点是否相同,如果相同则出栈,如果不同,那最后相同的结点就是我们要的返回值。 还有一种方法,不需要借助栈。先找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走,直到找到第一个公共结点。
尾尾部落
2018/09/04
5180
剑指Offer-两个链表的第一个公共结点
package LinkedList; import java.util.HashMap; /** * 两个链表的第一个公共结点 * 输入两个链表,找出它们的第一个公共结点。 */ public class Solution22 { public ListNode FindFirstCommonNode_2(ListNode pHead1, ListNode pHead2) { if (pHead1 == null || pHead2 == null)
武培轩
2018/04/18
5490
每日一题《剑指offer》链表篇之两个链表的第一个公共节点
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
终有救赎
2023/12/14
2750
每日一题《剑指offer》链表篇之两个链表的第一个公共节点
找出两个链表的第一个公共结点
对于长度相同的,第一遍即出结果,他们要么一起走到共同结点,要么一起到终点null 对于长度不同的,第二遍出结果,第一遍走不到一起,必须相互交换头才会走到一起 比如上图的树p1,p2的遍历顺序必然为: P1 : 2  4  6  7  1  3  5  6  7 P2:  1  3  5  6  7  2  4  6  7 显然,第二遍时候都会同时走到6
名字是乱打的
2022/05/13
1650
找出两个链表的第一个公共结点
剑指offer——两个链表的第一个公共结点
首先求得两人链表的长度,并将长度大的赋给p1,小的赋给p2,长度差值为diff。之后p1向前移diff次,之后进入循环,p1与p2同时前移直到p1等于p2。
AI那点小事
2020/04/18
2620
Sword To Offer 036 - 两个链表的第一个公共结点
两个链表的第一个公共结点 Desicription 输入两个链表,找出它们的第一个公共结点。 Solution class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { auto pointTemp = pHead1; int length1 = 0; int length2 = 0; while(point
Reck Zhang
2021/08/11
2180
C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t
Enjoy233
2019/03/05
3770
剑指36-两个链表中第一个共同的节点
链表 首先这个题目关键的地方就是,这个共同节点到底是什么。 假如有两个链表如下: 解法 两个链表中,值为6的节点为同一节点,这就是共同节点, 但是两个链表长度不同,不能都从头遍历, 所以先找到长度差,长的链表先走,直到两个链表长度相同,再同时遍历两个链表 #include <iostream> using namespace std; struct ListNode { int val; struct ListNode *next; ListNode(int x)
opencode
2022/12/26
2410
剑指36-两个链表中第一个共同的节点
每日一题《剑指offer》链表篇之链表中环的入口节点
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
终有救赎
2023/12/14
2250
每日一题《剑指offer》链表篇之链表中环的入口节点
两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。 链表结点定义如下: struct ListNode { int m_nKey; ListNode *m_pNext; }; 解决办法:首先遍历两个链表得到它们的长度,就能知道哪个链表比较长,以及长的链表比短的链表多几个结点。在第二次遍历的时候,在较长的链表上先走若干步,接着再同时在两个链表上遍历,找到的第一个相同的结点就是它们的第一个公共结点。 ListNode *FindFirstCommonNode(ListNode *pHea
猿人谷
2018/01/17
4590
算法-寻找两个链表的第一个公共结点
本文介绍了如何寻找两个链表的第一个公共结点,包括两个链表的长度、寻找公共结点的方法和代码实现。
chaibubble
2018/01/02
5310
算法-寻找两个链表的第一个公共结点
JavaScript算法题总结(一)链表
BM1 反转链表 /*function ListNode(x){ this.val = x; this.next = null; }*/ function ReverseList(pHead) { // write code here //递归终止条件 if(!pHead||!pHead.next) return pHead; let newhead = ReverseList(pHead.next); pHead.next.next = pHe
henu_Newxc03
2022/05/05
3120
JavaScript算法题总结(一)链表
剑指offer 两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点。 package offer.FindFirstCommonNode; public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { int len1=0; int len2=0; ListNode pH1 = pHead1; ListNode pH2
week
2018/12/25
3360
剑指Offer(三十六)-- 两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
秦怀杂货店
2022/02/15
2080
剑指Offer(三十六)-- 两个链表的第一个公共节点
【剑指Offer】52. 两个链表的第一个公共结点
设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。
瑞新
2020/12/07
2310
【剑指Offer】52. 两个链表的第一个公共结点
剑指Offer-2
---- 只能说受益匪浅 1 判定入栈,出栈序列是否匹配 // 思路:用辅助栈来模拟出入栈 import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { int cnt = 0; // 记录出栈个数或下标 Stack<Integer> stack = new Stack<>(); // 辅助
晚上没宵夜
2020/12/16
5000
链表常见面试题
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
河马嘴不大
2022/12/24
1930
每天一道剑指offer-链表中环的入口结点
考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默响起来一个声音:”乔戈里峰” 题目 每天一道剑
乔戈里
2019/01/28
3630
可视化图解算法:合并两个有序(排序)的链表
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
用户11589437
2025/03/31
200
可视化图解算法:合并两个有序(排序)的链表
Java链表应用
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142640.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
3620
推荐阅读
相关推荐
[剑指offer] 两个链表的第一个公共结点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档