剑指 Offer 52. 两个链表的第一个公共节点
贴个题目
贴个示例
解题思路:
这一道题我觉得官方题解解释的很清楚,大家可以参考一下:两个链表的第一个公共节点
其中证明是十分精彩的:
贴个代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA==NULL||headB==NULL) return NULL;
struct ListNode *h1=headA;//指针h1指向headA
struct ListNode *h2=headB;//指针h2指向headB
while(h1!=h2)
{
h1= h1 ==NULL? headB:h1->next;//循环
h2= h2 ==NULL? headA:h2->next;//循环
}
return h1;//返回h1和h2都一样
}
性能分析:
时间分析:
这里遍历了两个链表很多次,但时间复杂度还是O(n+m),其中n和m分别为两个链表的长度
空间分析:
新建了两个节点,空间复杂度是:O(1)