链表尾插法输出整数结果出现地址

img

#include
typedef int ElemType;

typedef struct NODE {
    ElemType data;   // 数据元素
    struct NODE* next;  // 指向下一个节点
}LNode, * LinkList;

LinkList createList() // 在本函数内 建立链式线性表、读入序列的个数、读入每个元素
{
    int n;
    scanf_s("%d", &n);
    LinkList p, q;
    LinkList a = (LinkList)malloc(sizeof(LNode));
    p = a;
    a->next = NULL;
    for (int i = 0; i < n; i++) {
        q = (LinkList)malloc(sizeof(LNode));
        scanf_s("%d", &(p->data));
        p->next = q;
        p = q;
    }
    p->next = NULL;
    return a;
}
int main()
{
    LinkList a;
    a = createList();
    LinkList p1;
    p1 = a->next;
    //测试输出结果
    while (p1)
    {
        printf("a = %d\n", p1->data);
        p1 = p1->next;
    }
    printf("\n");
}



###### 哪位小伙伴帮忙看看!!!为啥链表尾插法输出结果会带有地址?

###### 运行结果及报错内容 

q = (LinkList)malloc(sizeof(LNode));
scanf_s("%d", &(p->data));
你这里输入到p的节点去了,应该输入q的节点啊。写错啦

你现在相当于头节点和倒数第二个节点的data域输入了数据,最后一个节点没有输入数据,默认是随机值
你没有从头节点开始打印,是从第一个节点开始打印的,所以打印了后两个数据和一个随机值
改正方法和楼主回答一样

第19行:scanf_s("%d", &(q->data)); //scanf_s("%d", &(p->data));