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

相关推荐
_F_y19 分钟前
list简单模拟实现
c++·list
前进的程序员22 分钟前
C++ 在 Windows 和 Linux 平台上的开发差异及常见问题
linux·c++·windows
冠位观测者1 小时前
【Leetcode 每日一题】2900. 最长相邻不相等子序列 I
数据结构·算法·leetcode
努力写代码的熊大1 小时前
链表的中间结点数据结构oj题(力扣876)
数据结构·leetcode·链表
y102121041 小时前
Pyhton训练营打卡Day27
java·开发语言·数据结构
daiwoliyunshang1 小时前
哈希表实现(1):
数据结构·c++
pystraf1 小时前
模板分享:网络最小费用流
c++·算法·图论·网络流
GG不是gg1 小时前
排序算法之高效排序:快速排序,归并排序,堆排序详解
数据结构·算法·排序算法
GG不是gg1 小时前
排序算法之线性时间排序:计数排序,基数排序,桶排序详解
数据结构·算法·排序算法
thisiszdy1 小时前
<C++> MFC自动关闭对话框(MessageBoxTimeout)
c++·mfc