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

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

在这里插入图片描述

大家好,我是安然无虞。

文章目录

  • 每篇前言

每篇前言


博客主页:安然无虞

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

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

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

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

在这里插入图片描述


直接进入今天的主题,有这么一道链表题:
【实用博文】关于力扣牛客上面的接口型题目出bug时在VS上的调试问题
力扣上面是以接口的形式给出,不需要我们写IO函数,是这样的:
【实用博文】关于力扣牛客上面的接口型题目出bug时在VS上的调试问题
那么经常会有同学问如果代码出错了,图也一步步画了,也仔细查看代码了,但是就是找不出哪里出错了,比如上面这道题,我们一开始没有考虑全面,很容易写成这样:

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;}

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

所以思路是这样的:
【实用博文】关于力扣牛客上面的接口型题目出bug时在VS上的调试问题
【实用博文】关于力扣牛客上面的接口型题目出bug时在VS上的调试问题
这个时候就很简单了,正确的代码是这样的:

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;}

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

好,下面详细跟大家说说关于力扣牛客上面的接口型题目出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;}

然后开始调试即可。

完整的代码如下:

//画图分析不出来问题所在,只有一种办法,调试!#include#includestruct 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;}

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