剑指offer(33)-两个链表的第一个公共结点
来源:互联网 发布:windows画图 编辑:程序博客网 时间:2024/06/03 11:16
题目描述
输入两个链表,找出它们的第一个公共结点。
代码
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { // 得到两个链表的长度 unsigned int nLength1 = GetListLength(pHead1); unsigned int nLength2 = GetListLength(pHead2); int nLengthDif = nLength1 - nLength2; ListNode *pListHeadLong = pHead1; ListNode *pListHeadshort = pHead2; if (nLength2 > nLength1) { pListHeadLong = pHead2; pListHeadshort = pHead1; nLengthDif = nLength2 - nLength1; } // 先在长链表上走几步,再同时在两个链表上遍历 for (int i = 0; i < nLengthDif; ++i) { pListHeadLong = pListHeadLong->next; } while((pListHeadLong != NULL) && (pListHeadshort != NULL) && (pListHeadLong != pListHeadshort)) { pListHeadshort = pListHeadshort->next; pListHeadLong = pListHeadLong->next; } // 得到第一个公共节点 ListNode *pFirstCommonNode = pListHeadLong; return pFirstCommonNode; } // 获取链表的长度unsigned int GetListLength(ListNode *pHead){ unsigned int nLength = 0; ListNode *pNode = pHead; while(pNode != NULL) { nLength ++; pNode = pNode->next; } return nLength;}};
0 0
- 【剑指offer】两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 《剑指offer》两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- [剑指offer]两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 剑指offer|两个链表的第一个公共结点
- 剑指offer-两个链表的第一个公共结点
- 《剑指offer》-两个链表的第一个公共结点
- 剑指Offer: 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指Offer------两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 7-124 获取系统时间
- Android 自定义View——分类与流程
- 程序员必知的七个图形工具
- 如何在Latin 输入法中增加一种语言的词库
- 钉钉关联微信公众号刷步数思路
- 剑指offer(33)-两个链表的第一个公共结点
- I2C设备地址详解
- 你的经验正在蒙蔽你的双眼
- Mybatis与Ehcache整合
- Spring Mvc 一个请求的执行过程
- MongoDB初探
- 首次进入APP透明提示效果
- 第十五周项目二 洗牌
- TCP/IP、Http、Socket的区别