leetcode 链接:剑指 Offer 52. 两个链表的第一个公共节点
相同题目:
[容易] 160. 相交链表
题目
输入两个链表,找出它们的第一个公共节点。
注意:
- 如果两个链表没有交点,返回
null. - 在返回结果后,两个链表仍须保持原有的结构。
- 可假定整个链表结构中没有循环。
- 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
解答 & 代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {private:int calListLen(ListNode* head){int len = 0;ListNode* cur = head;while(cur != NULL){++len;cur = cur->next;}return len;}public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA == NULL || headB == NULL)return NULL;int lenA = calListLen(headA);int lenB = calListLen(headB);ListNode* curA = headA;ListNode* curB = headB;if(lenA > lenB){for(int i = 0; i < lenA - lenB; ++i)curA = curA->next;}else{for(int i = 0; i < lenB - lenA; ++i)curB = curB->next;}while(curA != NULL && curB != NULL){if(curA == curB)return curA;curA = curA->next;curB = curB->next;}return NULL;}};
执行结果:
执行结果:通过
执行用时:36 ms, 在所有 C++ 提交中击败了 98.26% 的用户
内存消耗:14.2 MB, 在所有 C++ 提交中击败了 67.11% 的用户
