#include<stdio.h>
#include<stdlib.h>
typedef struct LNode LNode;
typedef struct LNode *list;
typedef struct LNode{
int data;
LNode *next;//指向下一个节点
}LNod,*list;
LNode*getelem(list L,int i){
if(i<0)
return NULL;
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
int main(){
int a,b,c;
list L,m;
LNode*s,*r=L;
L=(list)malloc(sizeof(LNode));
L->next=NULL;//初始化
scanf("%d\n",&a);
for(int i=0;i<a;i++){
scanf("%d",&b);
s=(LNode*)malloc(sizeof(LNode));
s->data=b;
r->next=s;
r=s;
}
r->next=NULL;
scanf("%d",&c);
c=a-c+1;
m=getelem(L,c);
printf("%d",m->data);
}
要在为 L 分配空间之后再让 r 指向L的地址
L=(list)malloc(sizeof(LNode));
r=L;
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode LNode;
typedef struct LNode *list;
typedef struct LNode{
int data;
LNode *next;//指向下一个节点
}LNod,*list;
LNode*getelem(list L,int i){
if(i<0)
return NULL;
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
int main(){
int a,b,c;
list L,m;
LNode*s,*r;
L=(list)malloc(sizeof(LNode));
r=L;
L->next=NULL;//初始化
scanf("%d\n",&a);
for(int i=0;i<a;i++){
scanf("%d",&b);
s=(LNode*)malloc(sizeof(LNode));
s->data=b;
r->next=s;
r=s;
}
r->next=NULL;
scanf("%d",&c);
c=a-c+1;
m=getelem(L,c);
printf("%d",m->data);
}
修改后如下:
因为一开始L没有初始化,所以*r=L;
应该放在L初始化之后,这样r才能正确指向L
有帮助望采纳~
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode LNode;
typedef struct LNode *list;
typedef struct LNode
{
int data;
LNode *next; //指向下一个节点
} LNod, *list;
LNode *getelem(list L, int i)
{
if (i < 0)
return NULL;
LNode *p;
int j = 0;
p = L;
while (p != NULL && j < i)
{
p = p->next;
j++;
}
return p;
}
int main()
{
int a, b, c;
list L, m;
LNode *s, *r;
L = (list)malloc(sizeof(LNode));
r = L;
L->next = NULL; //初始化
scanf("%d\n", &a);
for (int i = 0; i < a; i++)
{
scanf("%d", &b);
s = (LNode *)malloc(sizeof(LNode));
s->data = b;
r->next = s;
r = s;
}
r->next = NULL;
scanf("%d", &c);
c = a - c + 1;
m = getelem(L, c);
printf("%d", m->data);
}
for(int i=0;i<a;i++){
scanf("%d",&b);
s=(LNode*)malloc(sizeof(LNode));
s->data=b;
r->next=s;
r=s;
}
这段代码有问题,头节点没有被赋值,第1个输入元素赋给了第2个节点,第2次输入赋给了第3个节点。。。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!