[啊哈算法]链表

这篇博客讲述了作者对链表和指针的新认识,特别是malloc()函数的理解。通过举例说明了链表遍历与数组遍历的区别,并强调了链表中常用变量如*t, *p, *head的作用。同时,提到了在计算机二级考试中,链表题目中常见的变量使用情况,并分享了啊哈算法在链表问题上的手打题解。" 138071646,22917562,Android极光推送集成与通知栏权限检查,"['Android开发', '推送服务', 'JPush', '权限管理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天算是对链表和指针有了一个新的感悟。以前总是朦胧的概念,特别对于malloc()函数,几乎是死记硬背,现在认识的清晰了一点。
感触如下:

  • 对于链表的使用正如数组的使用要有常用的遍历符号:t,数组中的遍历符号都是i,j;数组的遍历结束标志为数组长度,链表的遍历结束为t==NULL如果还是有点蒙,请看如下代码:

数组:

//数组
for(int i=0;i<n;i++){
	......
}

链表:

//链表
t=head;//前提是已经定义好t head都是指针类型的,如果不懂可以看完整的题解代码
//t=head就相当于数组中的i=0,赋初值。
while(t!=NULL)//循环条件{
	... ...
}
  • 对于链表来说,还有一些经常出现的定义符号*q,*p,*head
符号含义
*q表示上一个节点,如数组中i-1
*head表示头结点
*p临时存放

其中*p是几乎必不可少的,正如数组中的临时变量temp(随个人习惯不同,只需要知道是临时变量就行) ;至少在计算机二级中,是链表就会看见这几个变量

关于啊哈算法链表手打题解(半懵半懂)

#include<iostream>
#include<stdlib.h>
using namespace std;
struct node{
	int data;
	struct node *next;
};
int main(){
	int n,a;
	cin>>n;
	struct node *head,*p,*q,*t;
	head=NULL;//头指针初始为空 
	for(int i=0;i<n;i++){//循环读入n个数 表示原始数列 
		cin>>a;
		//动态申请一个空间,用来存放一个结点,并用临时指针p指向这个节点
		p=(struct node *)malloc(sizeof(struct node));
		p->data=a;
		p->next=NULL;
		if(head==NULL){
			head=p;//这是一个创建的节点 
		}else{
			q->next=p;
			//如果不是第一个创建的节点,上一个节点的后继指针,指向当前结点
		}
		q=p;//q表示当前节点 p表示临时存放 head头结点 
	}
	cin>>a;//读入带插入的数 
	t=head;// t为遍历变量,就像i j 一样用作遍历下标
	while(t!=NULL){//没有到达链表尾部的时候循环 
		if(t->next==NULL || t->next->data > a){
			//注意特殊情况,到达链表尾部
			p=(struct node *)malloc(sizeof(struct node));
			p->data=a;
			p->next=t->next;
			t->next=p;
			break;//插入完毕,退出循环 
		}
		t=t->next;//继续判断下一个结点	
	}
	t=head;//继续遍历链表,输出数据
	while(t!=NULL){//遍历终止的条件
		cout<<t->data<<' ';
		t=t->next;		
	} 
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值