剑指 Offer 52. 两个链表的第一个公共节点 Offer_52 题目详情 题解分析 可以使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历. 当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点:当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点. 这样,当它们相遇时,所指向的结点就是第一个公共结点. java代码 package com.walegarrett.…
题目 剑指 Offer 52. 两个链表的第一个公共节点 思路1(栈) 若两个链表相遇,则从它开始相遇的地方到链表末尾应该都是相同的,那么我们可以将两个链表分别放入两个栈中,然后依次循环比较两个栈顶的节点,同时用pre记录上一个节点,直到当前两个栈顶节点不相等,那么pre节点就是他们开始相遇的地方 代码 public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { Lin…
题目信息 时间: 2019-07-03 题目链接:Leetcode tag: 单链表 难易程度:简单 题目描述: 输入两个链表,找出它们的第一个公共节点. 示例: A: a1 -> a2 \ -> c1 -> c2 -> c3 / B:b1 -> b2 -> b3 注意 1. 如果两个链表没有交点,返回 null. 2. 在返回结果后,两个链表仍须保持原有的结构. 3. 可假定整个链表结构中没有循环. 4. 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存.…
题目链接 题目描述: 我的题解: 方法一:双指针法 思路分析: 声明两个指针p1,p2 分别指向链表A.链表B. 然后分别同时逐结点遍历 当 p1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点:当 p2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点. 如此,当它们相遇时,所指向的结点就是第一个公共结点.(p1 p2可以分别遍历完两条链表.同时开始,将可以保证同时遍历结束.又因一旦同时指向第一个相交节点时,剩下的节点数相同:故可以保证p1和p2能同时…
题解 nodeA走一个链表A(A独有+公共),再走B独有的长度, nodeB走一个链表B(B独有+公共),再走A独有的长度. 结果:两者相遇点即为交点:若没有交点,两者都走到null,会返回null. 代码 public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode nodeA=headA,nodeB=headB; while(nodeA!=nodeB…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个链表的结点,每到一个结点,就在第二个链表上遍历每个结点,判断是否相等.时间复杂度为O(m*n),效率低: 使用栈:由于公共结点出现在尾部,所以用两个栈分别放入两个链表中的结点,从尾结点开始出栈比较.时间复杂度O(m+n),空间复杂度O(m+n). 利用长度关系:计算两个链表的长度之差,长链表先走相差的步数,之…
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:栈 方法二:HashSet 方法三:不使用额外空间 日期 题目地址:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/ 题目描述 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1:…
题目描述 输入两个链表,找出它们的第一个公共结点. 题解: 分别遍历两个链表到链尾,并计算其长度,若最后一个节点相同,则存在公共节点 然后让长链表指针从头先移动长度差个节点,然后两个链表指针一起移动,第一个出现的 相同节点就是公共节点 class Solution { public: ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) { if (pHead1 == nullptr || pHead2 == null…
原创文章,转载请注明出处! 博客文章索引地址 # 题目 #举例 如果两个单向链表有公共的节点,那么这两个链表从第一个公共结点开始,之后所有结点都是重合的,不可能再出现分叉.拓扑结构如下图所示: # 思路      第一次遍历两个链表得到两个链表的长度,以及两个链表长度的差值error:第二次遍历两个链表时,先在较长的链表上走error步,接着分别遍历两个链表,找到的第一个相同的节点即为第一个公共节点,时间复杂度为O(m+n).比如在上图的两个链表中,第一次遍历两个链表得到两个链表的长度为5和4,…
该题目来源于牛客网<剑指offer>专题. 输入两个链表,找出它们的第一个公共结点. Go语言实现: //长度长的先走个长度差,然后ab一起比较后面结点 //长度一样,公共结点可能在首结点,即a=b //长度不一样,公共结点如果存在,只能在长度差之后 func findFirstCommonNode(a, b *ListNode) *ListNode { lenA := getListNodeLen(a) lenB := getListNodeLen(b) //对齐长度差 if lenA &g…