题解 | #暴力求解——两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
/*计算出两个链表的长度差,让长的链表的指针指像和短的链表指针指向起始步长一样*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *p =pHead1;
ListNode *p1 = pHead1;
ListNode *p2 = pHead2;
int len1 = 0;
int len2 = 0;
while (p!=nullptr) {
len1++;
p = p->next;
}
p=pHead2;
while (p!=nullptr) {
len2++;
p = p->next;
}
int len = len1 >= len2 ? (len1 - len2) : (len2 - len1);
if(len1 >= len2){
for(int i =0;i<len;i++){p1 = p1->next;}
while (p1 !=nullptr && p2 != nullptr && p1 != p2) {
p1 = p1->next;
p2 = p2->next;
}
}else {
for(int i=0;i<len;i++){p2 = p2->next;}
while (p1 != nullptr && p2!=nullptr &&p1!=p2) {
p1 = p1->next;
p2 = p2->next;
}
}
return p1;
}
};
查看16道真题和解析
