【实用博文】关于力扣牛客上面的接口型题目出bug时在VS上的调试问题

举报
安然无虞 发表于 2022/05/26 23:37:31 2022/05/26
【摘要】 大家好,我是安然无虞。 文章目录 每篇前言 每篇前言 博客主页:安然无虞 作者认证:2021年...

在这里插入图片描述

大家好,我是安然无虞。

文章目录

  • 每篇前言

每篇前言


博客主页:安然无虞

作者认证:2021年博客新星Top2

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请铁汁批评斧正。

火爆专栏:蓝桥杯基础算法剖析

在这里插入图片描述


直接进入今天的主题,有这么一道链表题:
在这里插入图片描述
力扣上面是以接口的形式给出,不需要我们写IO函数,是这样的:
在这里插入图片描述
那么经常会有同学问如果代码出错了,图也一步步画了,也仔细查看代码了,但是就是找不出哪里出错了,比如上面这道题,我们一开始没有考虑全面,很容易写成这样:

struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode* prev = NULL;
    struct ListNode* cur = head;
    while(cur)//cur为空时结束循环
    {
        if(cur->val != val)
        {
            prev = cur;
            cur = cur->next;
        }
        else
        {
            struct ListNode* next = cur->next;
            free(cur);
            cur = next;
            prev->next = cur;
        }
    }
    return head;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

上面代码是有错误的,原因是我们只考虑了常规情况,所以在执行程序之后会曝出这样的错误:
在这里插入图片描述
系统也自动给出了一个测试用例,这个时候我们第一方应不是想着调试,而是想有这么一个单链表,它有4个节点,且每个节点里的值都是7,而题目中也要求val为7,所以这里我们应该先画出图,然后再一步步考虑。

所以思路是这样的:
在这里插入图片描述
在这里插入图片描述
这个时候就很简单了,正确的代码是这样的:

struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode* prev = NULL;
    struct ListNode* cur = head;
    while(cur)//cur为空时结束循环
    {
        if(cur->val != val)
        {
            prev = cur;
            cur = cur->next;
        }
        else
        {
            struct ListNode* next = cur->next;
            if(prev == NULL)
            {
                free(cur);
                cur = next;
                head = next;
            }
            else
            {
                free(cur);
                cur = next;
                prev->next = cur;
            }
        }
    }
    return head;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

如果我们实在想不出也看不出错误所在,那么就只能选择调试了,那么该如何进行调试这类题目呢?

好,下面详细跟大家说说关于力扣牛客上面的接口型题目出bug时在自己的编译器上的调试问题:

首先根据程序给出的错误和测试用例创建一个单链表,这里的话就创建有4个节点,每个节点里的值为7,val也为7的单链表,正确的创建方法是这样的(主函数内容):

int main()
{
    struct ListNode* node1 = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* node2 = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* node3 = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* node4 = (struct ListNode*)malloc(sizeof(struct ListNode));

    node1->val = 7;
    node2->val = 7;
    node3->val = 7;
    node4->val = 7;

    node1->next = node2;
    node2->next = node3;
    node3->next = node4;
    node4->next = NULL;

    removeElements(node1, 7);

    return 0;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

然后开始调试即可。

完整的代码如下:

//画图分析不出来问题所在,只有一种办法,调试!

#include<stdio.h>
#include<stdlib.h>


struct ListNode {     
    int val;
    struct ListNode *next;
};

struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* prev = NULL;
    struct ListNode* cur = head;
    while (cur)
    {
        if (cur->val != val)
        {
            prev = cur;
            cur = cur->next;
        }
        else
        {
            struct ListNode* next = cur->next;
            free(cur);
            cur = next;
        }
    }
    return head;
}

int main()
{
    struct ListNode* node1 = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* node2 = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* node3 = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* node4 = (struct ListNode*)malloc(sizeof(struct ListNode));

    node1->val = 7;
    node2->val = 7;
    node3->val = 7;
    node4->val = 7;

    node1->next = node2;
    node2->next = node3;
    node3->next = node4;
    node4->next = NULL;

    removeElements(node1, 7);

    return 0;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

在这里插入图片描述

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/123578529

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。