当前位置: 首页 > 知识库问答 >
问题:

在insert函数里,node->next=p->next那步在vscode里会报错是怎么回事?

齐向笛
2023-09-19
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node{    int data;    struct Node *next;} Node;Node *insert(Node *head, int pos,int val){    Node new_head, *p = &new_head,*node = getNewNode(val);    new_head.next = head;    for(int i = 0; i < pos ; i++) p = p->next;    node->next = p->next;    p->next = node;    return new_head.next;}Node *getNewNode(int val){    Node *p = (Node*)malloc(sizeof(Node));    p->data = val;    p->next = NULL;    return p;}void clear(Node *head){    if(head == NULL) return;    for(Node *p = head,*q;p; p = q){        q = p->next;        free(p);    }    return;}void output_linklist(Node *head){    int n = 0;    for(Node *p = head;p;p = p->next) n +=1;    for(int i = 0;i < n; i ++){        printf("%3d",i);        printf("  ");    }    printf("\n");    for(Node *p = head; p; p = p->next){        printf("%3d",p->data);        printf("->");    }    printf("\n\n\n");    return;}int main(){    srand(time(0));    #define MAX_OP 20    Node *head = NULL;    for(int i =0; i < MAX_OP; i++){        int pos = rand()%(i + 1), val = rand()%100;        printf("insert %d at %d to linklist\n",val,pos);        head = insert(head,pos,val);        output_linklist(head);    }    return 0;}

共有1个答案

景胜涝
2023-09-19

这个回答算是对楼上问题评论区小伙伴的回答补充,在insert函数之前添加一个函数声明,或者将getNewNode函数的定义移到insert函数的前面就可以运行了。
比如说这样:

#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node{    int data;    struct Node *next;} Node;Node *getNewNode(int val){    Node *p = (Node*)malloc(sizeof(Node));    p->data = val;    p->next = NULL;    return p;}Node *insert(Node *head, int pos,int val){    Node new_head, *p = &new_head,*node = getNewNode(val);    new_head.next = head;    for(int i = 0; i < pos ; i++) p = p->next;    node->next = p->next;    p->next = node;    return new_head.next;}void clear(Node *head){    if(head == NULL) return;    for(Node *p = head,*q;p; p = q){        q = p->next;        free(p);    }    return;}void output_linklist(Node *head){    int n = 0;    for(Node *p = head;p;p = p->next) n +=1;    for(int i = 0;i < n; i ++){        printf("%3d",i);        printf("  ");    }    printf("\n");    for(Node *p = head; p; p = p->next){        printf("%3d",p->data);        printf("->");    }    printf("\n\n\n");    return;}int main(){    srand(time(0));    #define MAX_OP 20    Node *head = NULL;    for(int i =0; i < MAX_OP; i++){        int pos = rand()%(i + 1), val = rand()%100;        printf("insert %d at %d to linklist\n",val,pos);        head = insert(head,pos,val);        output_linklist(head);    }    return 0;}
 类似资料:
  • 问题内容: 我有一个简单的生成器功能 然后,我初始化生成器并尝试在控制台中打印值: 初次致电的论点去了哪里?有没有一种在生成器函数中利用它的方法? 这是Babel REPL ,您可以在其中看到该结果。 问题答案: 该方法定义如下: 25.3.1.2 Generator.prototype.next(value) 该方法执行以下步骤: 让 摹 是 这个 值。 返回GeneratorResume( g

  • 问题内容: 场景 :考虑以下是节点Web应用程序的代码部分。 问题 :我正在检查公正或公正哪一个。上面的示例代码对两者的工作原理完全相同,并且在执行方面没有任何区别。 问题 : 有人 可以对此加以说明,何时使用和何时使用以及一些重要的区别吗? 问题答案: 有人总是写是为了确保执行在触发回调后停止。 如果您不这样做,则可能要冒第二次触发回调的风险,这通常会造成灾难性的后果。您的代码可以正常使用,但我

  • HarmonyOS Next运行cpp崩溃该怎么排查? 看日志是崩溃在主线程,而且没有我自己动态库的堆栈信息:

  • 假设您有一个简单的代码块,如下所示: 这个函数有两个参数和,分别表示请求和响应对象。 另一方面,还有其他函数带有第三个参数,称为。例如,让我们看看下面的代码: 我不明白的意义是什么,也不明白为什么要使用它。在那个例子中,如果id不存在,实际上在做什么?

  • HarmonyOS Next升级到Preview2后Contacts Kit中枚举值和之前不一样是怎么回事? 自定义邮箱类型,CUSTOM_LABEL的值,从之前的10000改为0,这是怎么回事?

  • 前端文件: /src/app/api/compress/route.ts 后端文件:src/app/api/upload/route.ts 报错内容: 麻烦各位熟悉Next的大佬看一下 问题代码的GitHub地址:https://github.com/AnsonZnl/next-upload