为什么不能引用Linklist类型,怎么改动可以执行?

为什么执行不了,没有此类型?

#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
    int date;
    struct Lnode *Next;
}Lnode,*Linklist;
Linklist List_trailinsert(Linklist &L){
    L=(Lnode *)malloc(sizeof(Lnode));
    int x;
    Lnode *s,*r=L;
    scanf("%d",&x);
    while(x!=444){
        s=(Lnode*)malloc(sizeof(Lnode));
        s->date=x;
        r->Next=s;
        r=s;
        scanf("%d",&x);
    }
    r->Next=NULL;
    return L;
}
int main(){
    struct Lnode *p;
    p=Linklist List_trailinsert();
    do{
        printf("%d",&p->Next);
    }
    while(p->Next!=NULL);
    return 0;
}

#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
    int date;
    struct Lnode *Next;
}Lnode,*Linklist;
Linklist List_trailinsert(){
    Linklist L=(Lnode *)malloc(sizeof(Lnode));
    int x;
    Lnode *s,*r=L;
    scanf("%d",&x);
    while(x!=444){
        s=(Lnode*)malloc(sizeof(Lnode));
        s->date=x;
        r->Next=s;
        r=s;
        scanf("%d",&x);
    }
    r->Next=NULL;
    return L;
}
int main(){
    struct Lnode *p;
    p=List_trailinsert();
    do{
        printf("%d ", p->Next->date);
    }
    while(p->Next!=NULL);
    return 0;
}

另:date是日期,最好写成data

第24行:p=Linklist List_trailinsert(); 函数 List_trailinsert(Linklist &L) 是带参函数,所以将24行修改为:p = List_trailinsert(p); 即可。 修改完善如下,改动处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode {
    int date;
    struct Lnode* Next;
}Lnode, * Linklist;
Linklist List_trailinsert(Linklist& L) {
    L = (Lnode*)malloc(sizeof(Lnode));        
    int x;
    Lnode* s, * r = L;
    scanf("%d", &x);
    while (x != 444) {
        s = (Lnode*)malloc(sizeof(Lnode));
        s->date = x;
        r->Next = s;
        r = s;
        scanf("%d", &x);
    }
    r->Next = NULL;
    return L;
}
int main() {
    struct Lnode* p;
    p = List_trailinsert(p);  //p = Linklist List_trailinsert(); 修改
    do {
        p = p->Next;       // 修改
        printf("%d ", p->date); //printf("%d", &p->Next);  修改
    } while (p->Next != NULL);
    return 0;
}

【以下回答由 GPT 生成】

问题的原因是代码中的函数调用p=Linklist List_trailinsert();是错误的。修复这个问题需要在函数调用时移除Linklist,只保留函数名即可。另外,代码还存在一些其他的问题:

  1. printf函数的格式字符串使用了错误的占位符%d,应该使用%p打印指针值。
  2. 在循环中应该使用指针的Next成员来获取下一个节点,而不是获取Next指针的地址。

下面是修复后的代码:

#include<stdio.h>
#include<stdlib.h>

typedef struct Lnode{
    int date;
    struct Lnode *Next;
}Lnode,*Linklist;

Linklist List_trailinsert(Linklist &L){
    L=(Lnode *)malloc(sizeof(Lnode));
    int x;
    Lnode *s,*r=L;
    scanf("%d",&x);
    while(x!=444){
        s=(Lnode*)malloc(sizeof(Lnode));
        s->date=x;
        r->Next=s;
        r=s;
        scanf("%d",&x);
    }
    r->Next=NULL;
    return L;
}

int main(){
    struct Lnode *p;
    p = List_trailinsert();
    while(p->Next != NULL){
        printf("%p\n", p->Next);
        p = p->Next;
    }
    return 0;
}

修复后的代码移除了错误的函数调用语法,并使用了正确的格式字符串和指针操作来遍历链表并打印每个节点的指针值。



【相关推荐】



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