数据结构单链表问题,找bug

程序跑一半就退出了


#include<bits/stdc++.h>
using namespace std;
typedef struct LNode{
    int data;
    struct LNode* next;
}*LinkNode;
void InistLinkNode(LinkNode& L){
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
}
void IncreaseLinkNode(LinkNode& L,int x,int e){
    
    int j=0;
    LNode* s=L,*r=(LNode*)malloc(sizeof(LNode));
    while(j<x-1&&s!=NULL){
        j++;
        s=s->next;
    }
    r->data=e;
    r->next=s->next;
    s->next=r;
}
void DeleteLinkNode(LinkNode& L,int x){
    int j=0;
    LNode* p=L;
    while(p!=NULL&&j<x-1){
        p=p->next;
        j++;
    }
    LNode* q=p->next;
    p->next=q->next;
    free(q);
}
void InputLinkNode(LinkNode& L,int n){
    LNode* s=L;
    int e; 
    for(int i=0;i<n;i++){
        LNode* r=(LNode*)malloc(sizeof(LNode));
        scanf("%d",&e);
        r=s->next;
        r->data=e;
        s=r;
    }
}
void PrintfLinkNode(LinkNode& L){
    LNode* s=L->next;
    while(s!=NULL){
        printf("%d ",s->data);
        s=s->next;
    }
}
int main()
{
    int n;
    LinkNode L;
    InistLinkNode(L);
    scanf("%d",&n);
    InputLinkNode(L,n);
    int m;
    scanf("%d",&m);
    for(int i=0;i<m;i++){
        int a,b,c;
        scanf("%d",&a);
        if(a==0){
            scanf("%d%d",&b,&c);
            if(b>=0&&b<=n+1){
                IncreaseLinkNode(L,b,c);
            }
        }
        if(a==1){
            scanf("%d",&b);
            if(b&&b<=n){
                DeleteLinkNode(L,b);    
            }
        }
    }
    PrintfLinkNode(L);
    return 0;
}

【以下回答由 GPT 生成】

问题的原因是在函数InputLinkNode中,对链表节点的构造和赋值出现了错误。

具体问题分析: 1. 在函数InputLinkNode中,创建了一个新节点r,然后将r赋值给s->next,这样会导致s->next丢失了原来的指向,同时r也没有正确赋值给r->data,因此链表节点的值没有被正确赋值。 2. 在输入链表节点数值时,没有构造出链表节点,而是直接将输入的数值赋值给了r->data,因此链表中的节点并没有正确构建和连接起来。

下面是修改后的代码:

#include<bits/stdc++.h>
using namespace std;

typedef struct LNode{
    int data;
    struct LNode* next;
}LNode, *LinkNode;

void InistLinkNode(LinkNode& L){
    L = (LNode*)malloc(sizeof(LNode));
    L->next = NULL;
}

void IncreaseLinkNode(LinkNode& L, int x, int e){
    int j=0;
    LNode* s=L, *r=(LNode*)malloc(sizeof(LNode));
    while(j<x-1 && s!=NULL){
        j++;
        s = s->next;
    }
    r->data = e;
    r->next = s->next;
    s->next = r;
}

void DeleteLinkNode(LinkNode& L,int x){
    int j=0;
    LNode* p=L;
    while(p!=NULL && j<x-1){
        p = p->next;
        j++;
    }
    LNode* q = p->next;
    p->next = q->next;
    free(q);
}

void InputLinkNode(LinkNode& L,int n){
    LNode* s=L;
    int e; 
    for(int i=0; i<n; i++){
        scanf("%d",&e);
        LNode* r=(LNode*)malloc(sizeof(LNode));
        r->data = e;
        r->next = NULL;
        s->next = r;
        s = r;
    }
}

void PrintfLinkNode(LinkNode& L){
    LNode* s=L->next;
    while(s!=NULL){
        printf("%d ",s->data);
        s = s->next;
    }
}

int main(){
    int n;
    LinkNode L;
    InistLinkNode(L);
    scanf("%d",&n);
    InputLinkNode(L,n);
    int m;
    scanf("%d",&m);
    for(int i=0; i<m; i++){
        int a,b,c;
        scanf("%d",&a);
        if(a==0){
            scanf("%d%d",&b,&c);
            if(b>=0 && b<=n+1){
                IncreaseLinkNode(L,b,c);
            }
        }
        if(a==1){
            scanf("%d",&b);
            if(b && b<=n){
                DeleteLinkNode(L,b);    
            }
        }
    }
    PrintfLinkNode(L);
    return 0;
}

将以上代码保存为.c文件,并进行编译和运行,即可解决问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

提供数据,不能跑让人用肉眼查bug吗