剑指offer——面试题37:两个链表的第一个公共结点
2018-03-24 23:34
537 查看
剑指offer——面试题37:两个链表的第一个公共结点
Solution1:垃圾算法/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pHead1 == pHead2) return pHead2; else { struct ListNode *tempNode1 = pHead1, *tempNode2 = pHead2; while(tempNode1 != NULL){ tempNode2 = pHead2; while(tempNode2 != NULL){ if(tempNode1 == tempNode2) return tempNode1; tempNode2 = tempNode2->next; } tempNode1 = tempNode1->next; } return NULL; } } };
书上写的是先找出两个链表的长度,然后长链表先走长度差步的方法也可以。
下面这个代码比较吊。。
Solution2:
其思想是俩指针通过多走一遍线路形成闭环来抵消掉两个链表的长度差,真是聪明啊~
如下图所示,一目了然:
图咋这么大。。。
参考网址:https://www.nowcoder.com/profile/3017991/codeBookDetail?submissionId=19005908
class Solution { public: ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { ListNode *p1 = pHead1; ListNode *p2 = pHead2; while(p1!=p2){ p1 = (p1==NULL ? pHead2 : p1->next); p2 = (p2==NULL ? pHead1 : p2->next); } return p1; } };
相关文章推荐
- 剑指offer-面试题37-两个链表的第一个公共结点
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题37:两个链表的第一个公共结点
- 剑指offer 面试题37 两个链表的第一个公共结点
- 【剑指Offer】面试题37:两个链表的第一个公共结点
- 剑指Offer----面试题37:两个链表的第一个公共结点
- 【剑指offer】面试题37:两个链表的第一个公共结点
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 【剑指Offer学习】【面试题37:两个链表的第一个公共结点】
- 剑指offer——面试题37:两个链表的第一个公共结点
- 剑指offer-面试题37-两个链表的第一个公共结点
- 剑指offer--面试题37:两个链表的第一个公共结点
- 【剑指Offer学习】【面试题37:两个链表的第一个公共结点】
- 【剑指offer】面试题37:两个链表的第一个公共结点
- 剑指offer 面试题37 两个链表的第一个公共结点
- 【剑指offer】面试题37:两个链表的第一个公共结点
- 【面试题】剑指Offer-37-求两个链表的第一个公共节点
- 【剑指offer】面试题37-两个单链表的第一个公共结点
- 剑指offer面试题 求两个链表的第一个公共结点
- 剑指offer 37---求两个链表的第一个公共结点
- 剑指offer-37 两个链表的第一个公共结点