初学数据结构记录(2)——用尾插法构建单链表

初学记录,非标答,希望大佬们可以指出可以改进的地方 

//单链表的创建
/*头插法,新结点插入头节点后
(方法和插入结点的方法一样)
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;	
} 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值