【剑指offer】面试题52:两个链表的第一个公共节点
2017-08-01 03:10
363 查看
题目
输入两个链表,找出它们的第一个公共结点。思路
关键:这题的关键点在于,这两个链表,如果有公共点,
那么从他们的公共点开始,到链表结束,在两个链表中是一致的。
解法1:
使用两个栈
解法2:
1.首先遍历两个链表得到它们的长度m, n (m > n)
2.在长度为m的链表上先走m-n步
3.同时在两个链表上遍历,第一个相同的节点就是他们的第一个公共节点
代码(解法2)
/** * 题目: * 输入两个链表,找出它们的第一个公共结点。 * * 关键: * 这题的关键点在于,这两个链表,如果有公共点, * 那么从他们的公共点开始,到链表结束,在两个链表中是一致的。 * * 解法1: * 使用两个栈 * * 解法2: * 1.首先遍历两个链表得到它们的长度m, n (m > n) * 2.在长度为m的链表上先走m-n步 * 3.同时在两个链表上遍历,第一个相同的节点就是他们的第一个公共节点 * * @author peige */ public class _52_FirstCommonNodesInLists { public static class ListNode { public int val; public ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1 == null || pHead2 == null) return null; int len1 = 0; int len2 = 0; ListNode cur1 = pHead1; ListNode cur2 = pHead2; // 求链表1、链表2长度 for(ListNode cur = pHead1; cur != null; cur = cur.next) ++len1; for(ListNode cur = pHead2; cur != null; cur = cur.next) ++len2; if(len1 > len2) { for(int i = 0; i < len1 - len2; ++i) cur1 = cur1.next; } else { for(int i = 0; i < len2 - len1; ++i) cur2 = cur2.next; } while(cur1 != null) { if(cur1 == cur2) return cur1; cur1 = cur1.next; cur2 = cur2.next; } return null; } }
测试
/** * 太简单了就不测试了 0.0 * * @author peige */ public class _52_Test { }
相关文章推荐
- 【面试题】剑指Offer-37-求两个链表的第一个公共节点
- 剑指Offer-52:两个链表的第一个公共节点
- [剑指offer][面试题37]两个链表的第一个公共节点
- [剑指offer]面试题37.两个链表中的第一个公共节点
- 剑指offer——两个链表的第一个公共结点(给出的方法,都是针对有且只有一个公共节点的方法)
- 求两个链表的第一个公共节点(来源于剑指名企offer)
- 剑指Offer 37题 两个链表的第一个公共节点 Java版
- 剑指offer 37:求两个链表的第一个公共节点
- 【剑指Offer】面试题37:两个链表的第一个公共结点
- 剑指Offer—36—两个链表的第一个公共节点
- [剑指Offer 37] 两个链表的第一个公共节点(Python)
- 【剑指Offer学习】【面试题37:两个链表的第一个公共结点】
- 剑指Offer----面试题37:两个链表的第一个公共结点
- 【剑指offer】面试题37:两个链表的第一个公共结点
- 剑指offer39:两个链表中的第一个公共节点
- 【剑指offer】面试题37:两个链表的第一个公共结点
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题37:两个链表的第一个公共结点
- 剑指offer 面试题37 两个链表的第一个公共结点
- 剑指offer--面试题37:两个链表的第一个公共结点
- 剑指Offer---面试题37:两单链表中第一个公共节点