如何建链表,链表里面的指针分别是什么意思

#include<stdio.h>
#include<stdlib.h>
struct node{//建造一个结构体 叫做node
	int data;//里面有数据域和next域,next的作用是指向下一个节点,next域里有下一个节点的指针地址
	struct node *next;
};
int main(){
	struct node *next,*q,*p,*head,*t;
	int i,n,a;
	scanf("%d",&n);
	head=NULL;//先将头指针设为空先,后面要用
	for(i=0;i<n;i++){
		p=(struct node*)malloc(sizeof(struct node));//sizeof(struct node)是求这个结构体的字节数大小,前面那个是强制转化类型 malloc是英文 memery allocate的缩写,意思是内存分配,前面的struct node*要带*而后面求字节数长度而已就不需要带*号我是这么记得;
		scanf("%d",&a);
		p->data=a;//注意p,q都是指针,->则是一个运算符,意思是进入指针所在的节点(结构体)
                  //这里的意思就是进入p所在节点的data域,将a赋值到data域里面
		p->next=NULL;
		if(head==NULL){
			head=p;//如果p是第一个节点的话,就把head指针指向p,后面输出就是依靠这个head指针从头遍历输出;
			q=p;//这里q是p的前一个节点的指针,没有前节点就要指到一起,后面创新节点,p就在后面,q就在前面
		}else q->next=p;q=p;//q->next=p,就是将p节点接在q的后面,依靠q指针的移动来链接新节点 ,q=p是拿来当作指针用的,就是p指针移到q的位置,深层的意义就是p的地址给了q,此时的q就相当于p,动态表示就是p移到了q的位置,即q指向新插入的节点p;
	}
	t=head;
while (t!=NULL){
	printf("%d ",t->data);
	t=t->next;
}
getchar();
getchar();
free(p);//malloc的内存是“借”的,内存就像手机的后台,是有限的,用完赶紧删了
return 0;
}

纯净版:

#include<stdio.h>
#include<stdlib.h>
struct node{
	int data;
	struct node *next;
};
int main(){
	struct node *next,*q,*p,*head,*t;
	int i,n,a;
	scanf("%d",&n);
	head=NULL;
	for(i=0;i<n;i++){
		p=(struct node*)malloc(sizeof(struct node));
		scanf("%d",&a);
		p->data=a;
		p->next=NULL;
		if(head==NULL){
			head=p;
			q=p;
		}else q->next=p;q=p;
	}
	t=head;
while (t!=NULL){
	printf("%d ",t->data);
	t=t->next;
}
getchar();
getchar();
free(p);
return 0;
}

判断是头插法还是尾插法也很简单,新节点,也就是分配了空间的节点在原来的节点前面还是后面就可以知道是头插法还是尾插法,在前面就是头插法,在后面就是尾插法。

如该代码p=(struct node*)malloc(sizeof(struct node))可以知道p是新节点;

而q->next=p;q=p;可知,新节点在q的后面,所以应该是尾插法;先输入的值在链表的前面;

如果是p->next=q;q=p;就是头插法,先输入的值在后面;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值