题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
方法:双指针法
代码
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if(!pHead1 || !pHead2){
return nullptr;
}
ListNode *p1=pHead1;
ListNode *p2=pHead2;
while(p1!=p2){
p1=p1?p1->next:pHead2;//p1为true时,指针后移,否则从链表2开始
p2=p2?p2->next:pHead1;//p2为true时,指针后移,否则从链表1开始
}
return p1;
}
};
时间复杂度:O(m+n), m,n分别为链表A,B的长度,最坏情况下,公共结点为最后一个,需要遍历m+n个结点
空间复杂度:O(1)