两个链表的第一个公共节点
2017-08-20 16:07
183 查看
题目
输入两个链表,找出它们的第一个公共结点。思路
分别扫描2个链表,并记录两个链表的长度,如果两个链表有公共节点,那么他们的尾节点一定是一样的。在确定会有公共节点后,根据两个链表的长度差,把长的链表先进行移动,一直到两个链表剩下来的长度相等,在这之后两个链表同时往后扫描,一直第一个公共节点。参考代码
/* 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 nullptr; int cnt1 = 0, cnt2 = 0; ListNode* p1 = pHead1; ListNode* p2 = pHead2; while (p1->next) { p1 = p1->next; cnt1++; } while (p2->next) { p2 = p2->next; cnt2++; } if (p1 != p2) return nullptr; else { if (cnt1 > cnt2) { int temp = cnt1 - cnt2; while (temp--) { pHead1 = pHead1->next; } } else { int temp = cnt2 - cnt1; while (temp--) { pHead2 = pHead2->next; } } while (pHead1 != pHead2) { pHead1 = pHead1->next; pHead2 = pHead2->next; } return pHead1; } } };
相关文章推荐
- 《剑指offer》两个链表的第一个公共节点
- 两个链表的第一个公共节点38
- 面试题之包含min函数的栈,两个链表的第一个公共节点
- 《剑指offer》编程题java实现(二十二):两个链表的第一个公共节点
- 判断两个链表是否有公共节点并返回第一个公共节点
- 已知有两个链表,判断它们是否相交,若相交求其第一个公共节点
- 两个链表的第一个公共节点(剑指offer)
- 两个链表的第一个公共节点(引用相同)
- 两个链表相交以及第一个公共节点的问题
- 【笔试面试——27】链表07——两个链表的第一个公共节点
- 找两个链表的第一个公共节点
- 求两个链表的第一个公共节点(来源于剑指名企offer)
- 两个链表的第一个公共节点
- 剑指offer----两个链表的第一个公共节点----java实现
- 剑指offer-两个链表的第一个公共节点
- 找出两个链表的第一个公共节点
- 面试题37:两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 经典算法学习——打印两个链表的第一个公共节点
- 输入两个链表,找出他们第一个公共节点