初学记录,非标答,希望大佬们可以指出可以改进的地方
//单链表的创建
/*头插法,新结点插入头节点后
(方法和插入结点的方法一样)
s->next = L->next; // 新节点指向开始节点
L-next = s; // 头结点指向s节点,使s成为开始节点
尾插法,不断向后补入新节点
r->next=s;//将s插入到r后 r在前面初始化为 r = L r是尾指针
r=s;//使r指向尾结点 */
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define SIZE 25000
//定义链表储存结构
struct Node {
int number;//定义数据域
Node* next;//定义指针域指向下一个结点
};
//创建链表
Node* creat(int num[],int len){
Node *p,*pre,*head;//p每次存放需要新加入的结点,pre作为前置结点,head作为头结点
head = (Node*)malloc(sizeof(Node));//创建头节点的存储空间
head->next = NULL;//头结点不存储数据
pre=head;//记录pre为head
int i;
for (i=0; i<len; i++){
p = (Node*)malloc(sizeof(Node));//创建新结点,可赋值,**疑问如何释放内存**
p->number = num[i];
p->next = NULL;//指针域设为NULL作为最后的新结点添加到原结点上(尾插法)
pre->next = p;//向尾部添加结点
pre = p;//pre作为前置结点
}
return head;//返回头结点
}
//主函数
int main () {
int i=0;
int X;//临时存储输入的数
int* num = (int*)malloc(SIZE*sizeof(int));//申请输入数据空间
while(scanf("%d",&X)){
if(X==0) break;
else{
num[i]=X;
i++;
}
}
Node* L=creat(num,i);//创建新链表
L=L->next;
while(L!=NULL){
printf("%d ",L->number);
L=L->next;
}
free(num);
return 0;
}