第一次错误提交:
cpp
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lena = 1,lenb = 1;
ListNode* p = headA->next;
while(p){p = p->next;++lena;}
ListNode* q = headB->next;
while(q){q = q->next;++lenb;}
if(lena>lenb){
p = headA;
q = headB;
}
else{
p = headB;
q = headA;
}
int interval = (lena>lenb)?(lena-lenb):(lenb-lena);
while(interval--){
p = p->next;
}
while(p && q && (p->val)!=(q->val)){
p = p->next;
q = q->next;
}
return p?p:nullptr;
}
};
我忽略了有可能两个节点值相同,但是位置不同的情况;
第二次错误提交:
cpp
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lena = 1,lenb = 1;
ListNode* p = headA->next;
while(p){p = p->next;++lena;}
ListNode* q = headB->next;
while(q){q = q->next;++lenb;}
if(lena>lenb){
p = headA;
q = headB;
}
else{
p = headB;
q = headA;
}
int interval = (lena>lenb)?(lena-lenb):(lenb-lena);
while(interval--){
p = p->next;
}
while(p && q && (&p)!=(&q)){
p = p->next;
q = q->next;
}
return p?p:nullptr;
}
};
这次我知道比较地址而不是值了,结果对ListNode*取地址了,即:我想要比较两个指针指向的内容是否同一地址,结果比较了两个指针的地址是否同一地址。
第三次正确提交:
cpp
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lena = 1,lenb = 1;
ListNode* p = headA->next;
while(p){p = p->next;++lena;}
ListNode* q = headB->next;
while(q){q = q->next;++lenb;}
if(lena>lenb){
p = headA;
q = headB;
}
else{
p = headB;
q = headA;
}
int interval = (lena>lenb)?(lena-lenb):(lenb-lena);
while(interval--){
p = p->next;
}
while(p && q && p!=q){
p = p->next;
q = q->next;
}
return p?p:nullptr;
}
};
晚上复习这个题,结果犯了一个很低级的错误:
初始化lena lenb时,我写成了这样:
cpp
int lena,lenb = 1;
显然lena是一个随机值。