问题遇到的现象和发生背景
单链表(不带头结点)的输出,第一个元素似乎是地址值。
问题相关代码
int main(){
LinkList L;
InitList(L);
int x, i = 1;
scanf("%d", &x);
while(x != 1111){
ListInsert(L, i, x);
i++;
scanf("%d", &x);
}
PrintList(L);
_Bool ListInsert(LinkList L, int i, int element){
//位序异常
if(i < 1){
return false;
}
//在第一位前插入数据
if(i == 1){
//不理解,L已经指向newData了,在此输出正常,但出了此函数就输出地址值
LNode *newData = (LNode *)malloc(sizeof(LNode));
newData->data = element;
newData->next = L;
L = newData;
printf("%d\n",L->data);
//L->data = element;
return true;
}
//寻找位序前一位元素
LNode *p;
int j = 1;
p = L;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
//以下部分可修改为
//return InsertNextNode(p, element);
//位序异常:超出长度
if(p == NULL){
return false;
}
//新数据插入单链表
LNode *newData = (LNode *)malloc(sizeof(LNode));
newData->data = element;
newData->next = p->next;
p->next = newData;
return true;
}
_Bool PrintList(LinkList L){
LNode *p = L;
while(p != NULL){
printf("%d->", p->data);
p = p->next;
}
printf("\n");
return true;
}
运行结果及报错内容
我的解答思路和尝试过的方法
将第一个结点(i==1时候的特殊情况)的存储改为直接赋值 L->data = element; 这样是能正常存储读取第一个数的。