题解 | #牛牛的单向链表#
头插法比较简单,但头插法会把最新的放第一个,所以再申请一个数组换位。
头插法讲解: 声明一个头指针data(技巧:命名可名为lianbiao),一个新结构体指针temp用来存储输入的值。
先判断头指针是否为空。若为空,将头指针的值改为结构体指针的值,data.next(下一个指针)值为空。
否则 将新结构体指针temp的下一个指针改为头指针的值,然后头指针改为新结构体指针的值。
迭代的实现方式:此链表有个特点。只有尾巴是NULL,所以用while循坏,用指针!=NULL作为条件。
最后将头指针改为头指针的下一个指针data.next的方式实现迭代。
malloc申请的必要:malloc在不知节点个数的情况是必须申请动态内存的!
首先内存在栈里很容易被覆盖,在堆里就可避免重复使用,而且栈内存只分配一次。我的思路是在循坏里添加节点,但即使循坏,栈也只分配一次。
头插法讲解: 声明一个头指针data(技巧:命名可名为lianbiao),一个新结构体指针temp用来存储输入的值。
先判断头指针是否为空。若为空,将头指针的值改为结构体指针的值,data.next(下一个指针)值为空。
否则 将新结构体指针temp的下一个指针改为头指针的值,然后头指针改为新结构体指针的值。
迭代的实现方式:此链表有个特点。只有尾巴是NULL,所以用while循坏,用指针!=NULL作为条件。
最后将头指针改为头指针的下一个指针data.next的方式实现迭代。
malloc申请的必要:malloc在不知节点个数的情况是必须申请动态内存的!
首先内存在栈里很容易被覆盖,在堆里就可避免重复使用,而且栈内存只分配一次。我的思路是在循坏里添加节点,但即使循坏,栈也只分配一次。
假设有四个节点,没用malloc时,你的四个(结构体)节点都会覆盖在同一个节点上。所以打印时只会打印最后一个,还有种可能,调试时发现Programm received signal SIGSEGV, Segmentation fault,有可能是指针访问到未分配的内存的提示。,说明声明指针变量时是没有开辟一个结构体大小的内存。
用malloc时,你的四个节点在堆里都存在,会分开而不是覆盖。所以能连起来。
我也是新手,欢迎各位大佬指正!
" src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553876543/8526E2CCE5A1270D1D3A9550826C140A" />
# include<stdio.h>
# include<string.h>
# include <stdlib.h>
struct math{
int x;
struct math *next;
};
int main()
{
int y;
scanf("%d",&y);
int a[y];
int b[y];
for(int i=0;i<y;i++) //把数列倒序
{
scanf("%d",&a[i]);
}
for(int i=0;i<y;i++)
{
b[i]=a[y-1-i];
//printf("%d",b[i]);
}
struct math *data=NULL;
for(int i=0;i<y;i++)
{
struct math *temp;
//struct math *temp=(struct math *)malloc(sizeof(struct math)) ;
temp->x=b[i];
temp->next=NULL;
if(data==NULL)
{
data=temp;
temp->next=NULL;
}
else
{
temp->next=data;
data=temp;
}
}
while(data!=NULL)
{
printf("%d ",data->x);
data=data->next;
}
return 0;
}
查看28道真题和解析
凡岛公司福利 381人发布