题目描述:
输入两个链表,找出它们的第一个公共结点。
思路:
题目比较简单。首先求两个链表的长度,长的先走,然后一起走,找公共节点。时间复杂度O(n)。
代码:
语言C++,已通过牛课网在线测试。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
//先统计两个链表长度 长的先走 然后一起走
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode* pNode1 = pHead1;
ListNode* pNode2 = pHead2;
int len1 = getLength(pHead1);
int len2 = getLength(pHead2);
if(len1 > len2){
for(int i = 0; i < len1 - len2; i++) pNode1 = pNode1->next;
}
if(len1 < len2){
for(int i = 0; i < len2 - len1; i++) pNode2 = pNode2->next;
}
while(pNode1 && pNode2){
if(pNode1 == pNode2) return pNode1;
pNode1 = pNode1->next;
pNode2 = pNode2->next;
}
return NULL;
}
//求链表长度
int getLength(ListNode* pHead){
int length = 0;
ListNode* pNode = pHead;
while(pNode){
length++;
pNode = pNode->next;
}
return length;
}
};