Leetcode160.相交链表

链接

第一次错误提交:

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是一个随机值。

相关推荐
纵有疾風起1 小时前
C++—string(1):string类的学习与使用
开发语言·c++·经验分享·学习·开源·1024程序员节
郭源潮15 小时前
《Muduo网络库:实现TcpServer类终章》
服务器·网络·c++·网络库
liebe1*17 小时前
C语言程序代码(四)
c语言·数据结构·算法
进击的圆儿7 小时前
递归专题4 - 网格DFS与回溯
数据结构·算法·递归回溯
MMjeaty8 小时前
查找及其算法
c++·算法
寂静山林9 小时前
UVa 1597 Searching the Web
数据结构·算法
yong15858553439 小时前
1. Linux C++ muduo 库学习——库的编译安装
linux·c++·学习
9523610 小时前
数据结构-顺序表
java·数据结构·学习
mit6.82410 小时前
回溯剪枝trick
c++
haofafa11 小时前
高精度加减法
java·数据结构·算法