- 题目:输入两个链表,找出它们的第一个公共结点。
- 思路:
- 暴力思路,遍历某链表的每一个节点,如果之后的节点都相同,那么该节点为第一个公共节点,复杂度m*n
- 优化思路:从后往前的思路,后面的节点都是相同的,第一个不相同的节点的next即为第一个公共节点,复杂度m+n
- 启发或者坑
- 所有的结果必须有返回值:报错了control reaches end of non-void function
- 要取stack的top值,必须先判断是否为null
- 代码
/* 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 == NULL || pHead2 == NULL) return NULL; stack<ListNode*> p1; stack<ListNode*> p2; while(pHead1) { p1.push(pHead1); pHead1 = pHead1->next; } while(pHead2) { p2.push(pHead2); pHead2 = pHead2->next; } ListNode* temp = NULL; while (!p1.empty() && !p2.empty()) { //在判断top之前需要判断是否为空 if (p1.top() == p2.top()) { temp = p1.top(); p1.pop(); p2.pop(); } else { return temp; } } return temp; //所有结果必须有返回值 } };
剑指offer 41.两个链表的第一个公共节点
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/103892288
今日推荐
周排行