这是我的代码,求链表的倒数第m个元素,请问哪里错了

#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个节点。。。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632