为什么执行不了,没有此类型?
#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
,只保留函数名即可。另外,代码还存在一些其他的问题:
printf
函数的格式字符串使用了错误的占位符%d
,应该使用%p
打印指针值。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;
}
修复后的代码移除了错误的函数调用语法,并使用了正确的格式字符串和指针操作来遍历链表并打印每个节点的指针值。
【相关推荐】