《剑指offer》-两个链表的第一个公共结点
来源:互联网 发布:网络电视手机在线直播 编辑:程序博客网 时间:2024/05/28 04:54
题目描述
输入两个链表,找出它们的第一个公共结点。
解法:
一、暴力法,第一个链表从开头遍历,和第二个链表的每个节点元素比较,则需要两个for嵌套循环,那么复杂度是o(mn)
二、低复杂度法,最长的链表先行遍历,然后再同时遍历比较相等的节点。复杂度为o(n+m)
/*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 len1 = getListNode(pHead1); unsigned int len2 = getListNode(pHead2); int lenDiff = len1 - len2;; ListNode* pHeadLong = pHead1; ListNode* pHeadShort = pHead2; if(len1 < len2) { pHeadLong = pHead2; pHeadShort = pHead1; lenDiff = len2 - len1; } for(int i = 0; i < lenDiff; ++i){ pHeadLong = pHeadLong->next; } while(pHeadLong && pHeadShort && pHeadLong != pHeadShort) { pHeadLong = pHeadLong->next; pHeadShort = pHeadShort->next; } ListNode* firstCom = pHeadLong; return firstCom; } unsigned int getListNode(ListNode* pHead) { ListNode* p = pHead; unsigned int len = 0; while(p) { ++len; p = p->next; } return len; }};
0 0
- 【剑指offer】两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 《剑指offer》两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- [剑指offer]两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 剑指offer|两个链表的第一个公共结点
- 剑指offer-两个链表的第一个公共结点
- 《剑指offer》-两个链表的第一个公共结点
- 剑指Offer: 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指Offer------两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- httphelper优化 cookie自动处理
- linux设备驱动中的并发控制
- Java基础知识(一)
- mapreduce
- TabLayout
- 《剑指offer》-两个链表的第一个公共结点
- 15.2 asyncio--异步I/O事件库
- 欢迎使用CSDN-markdown编辑器
- 字节流读取数据注意事项
- 程序员常用工具大全(转载+原创)
- [Cloud Computing]Mechanisms: Automatically Defined Perimeter Controller
- 微信 支付异步回调 获取参数值
- 使用Eclipse里的Tomcat经常内存溢出的解决方法
- 匈牙利算法模板