栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

PIPIOJ刷题个人经验教训总结(数据结构版个人总结用)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PIPIOJ刷题个人经验教训总结(数据结构版个人总结用)

2021/01/06

项目场景:1213题,用尾插法构造单链表 问题描述:

为了在通过地址传递的方式,传递参数——头指针的情况下,维护头指针本身的不变性(对于有头结点的单链表而言,头指针始终指向头结点)。一般会将头指针赋值给一个临时指针,对这个临时指针进行操作而不是对头指针本身(起码王道和大话数据结构都是这样写的)。于是在用尾插法构造单链表,传入尾指针作为参数时也陷入了相同的思维定式。导致尾指针一直没有变化,而相比于头指针在构造单链表过程中,一直指向头结点,尾指针则一直是指向单链表的最后一个节点,因此,尾指针的指向性在构造单链表过程当中需要不断变化。

void insert(link &tail,int i){
	link n=(link)malloc(sizeof(node));
	n->next=NULL;//这一步必须有,从实践结果来看,对于自定义数据结构的指针
	link t=tail;//域,C是不存在“默认为NULL”的设定的。所以建议构造一个
	n->d=i;//初始化函数,否则在遍历单链表时就会出现问题,未赋值的结点
	t->next=n;//指针域指向性是随机的,而不是默认为NULL
	t=n;
}

解决方案:
void insert(link &tail,int i){
	link n=(link)malloc(sizeof(node));
	n->next=NULL;
	//link t=tail;
	n->d=i;
	tail->next=n;
	tail=n;
}

2021/01/07

项目场景:1217题,逆转部分单链表

题目描述
反转长度为N的单链表从位置 L 到 R 的子段。请在常数空间复杂度下使用一趟扫描完成反转。
输入
第一行三个整数N,L,R,1<=L<=R<=N
接下来N个数表示N个节点的值
输出
输出反转后的单链表节点值

问题描述:

我的意思是通过遍历单链表,获取第L个节点前一个节点的指针,以及第R个节点的指针,并记录R+1个节点的指针

for(int i=1;i<=t;i++){
		if(i+1==s) first=p;
		if(i==t) second=p;
		p=p->next;
	}
但是这样写并不完备,因为如果L=1,那么我的first就没有被赋值
解决方案:
if(s==1) first=l;
if(t==1) second=l;

加两行代码即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/698282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号