为啥一直报越界错误 感觉逻辑没问题0.0(语言-c语言)

img

img

这个地方感觉逻辑没问题0.0 但是p-next一直报越界的错误

代码不全,错误行也看不到,
从你给的这些代码看,
好好学习变量的作用域
函数无返回值,只给函数一个值,分配的变量或地址空间如何让主函数使用?

尾插法不对吧兄弟,28,29两行只是把新结点放到头结点的位置,但是原来的头结点以及后面的结点会丢失的啊,应该改为

p->next=q->next;
q->next=p;

这段代码错误的原因,是初始化函数没写正确,修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct lnode {
    ElemType  data;
    struct lnode* next;
}lnode,*list;

//初始化链表
void init(list* head)
{
    (*head) = (list)malloc(sizeof(lnode));
    (*head)->data = 0;
    (*head)->next = NULL;
}

//尾插法
void create(list head)
{
    list q = head;
    int  n = 0;
    scanf("%d", &n);
    while (n != 999) {
        list p = (list)malloc(sizeof(lnode));
        p->data = n;
        p->next = NULL;
        q->next = p;
        q = p;
        scanf("%d", &n);
    }
}

void print(list head)
{
    list p = head;
    while (p->next) {
        printf("%d ", p->next->data);
        p = p->next;
    }
    printf("\n");
}

int main()
{
    list l;
    init(&l);
    create(l);
    print(l);
    return 0;
}