程序跑一半就退出了
#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吗