单链表经典算法题2

                                                🌹个人主页🌹:喜欢草莓熊的bear

                                                       🌹专栏🌹:数据结构


前言

这次介绍的题会比上次更有难度哦,宝宝们系好安全带。咱们出发了!

一、合并两个有序链表

 

1.1思路

创建一个新链表来接收合并后的链表(同时也会创建两指针分别为头指针和尾指针,我们这里创建的是一个带头链表),用两个指针分别来遍历两个链表。因为要升序,所以谁小就把谁为尾插到新链表里面去。我们循环结束的条件是两个遍历的指针不为空。但是必定会有一个指针先指向空指针,所以我还要在循环结束后加上一天尾插语句(因为不确定是谁先走完,所以两条都要写)。根据示列3得知,其中一个为空链表就直接返回另外一条链表。因为我们是创建了链表所以还要记得free了。

1.2代码实现

typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 
{ListNode* l1 = list1;ListNode* l2 = list2;if(l1 == NULL){return l2;}if(l2 == NULL){return l1;}
ListNode* head,* ptail;
head=ptail=(ListNode*)malloc(sizeof(ListNode));//创建一个带头链表
while(l1 && l2)
{if(l1->val < l2->val){ptail->next=l1;ptail=l1;l1=l1->next;}else{ptail->next=l2;ptail=l2;l2=l2->next;}
}
if(l1)
{ptail->next=l1;
}
if(l2)
{ptail->next=l2;
}
ListNode* ret=head->next;
free(head);
head=NULL;
return ret;
}

二、环形链表的约瑟夫问题

 

2.1思路

第一步节点的创建,在之前的单链表中就写过的。

其次我们要得到一个环形链表,怎么做呢?就是让链表尾节点指向头节点,定义两个指针分别头指针和尾指针。

再者我们得到了环形链表所以就要开始考虑计数了,假设我只定义一个指针,释放了计数为2的节点那么就会导致我们找不到后面的节点了。所以我们要定义两个指针prev指针指向头节点,patil指针指向尾节点。循环里面当计数为2时,我们就先改变patil->next指向prev->next指针,再把prev指向patil->next。不等于时,则计数加1和prev、patil向后移动(先移动patil,再移动prev),这里循环的条件计算prev!=环形链表的头指针。防止出现空指针,该指向空指针指向空指针,该释放的释放。释放之前把最后得到的节点的val值储存起来,然后返回val。

2.2代码实现

typedef struct ListNode ListNode;
ListNode* BuyNode(int x)//创建节点
{ListNode* node=(ListNode*)malloc(sizeof(ListNode));if(node==NULL){exit(1);}node->val=x;node->next=NULL;return node;
}ListNode* cyclelist(int n)//形成环形链表
{ListNode* head=BuyNode(1);ListNode* patil=head;for(int i=2;i<=n;i++){patil->next=BuyNode(i);patil=patil->next;}patil->next=head;return patil;
}int ysf(int n, int m ) 
{ListNode* patil=cyclelist(n);ListNode* prev=patil->next;int count=1;while(prev->next!=prev){if(count==m){patil->next=prev->next;free(prev);prev=patil->next;count=1;}else {patil=prev;prev=prev->next;count++;}}prev->next=NULL;int ret=prev->val;free(prev);prev=NULL;return ret;
}

总结

做这种链表题一定要画图,结合图做起来比较好。好了我们的单链表经典算法题就结束了,不记得了就来bear这回顾哦。后期还会有其他题目讲解,有不同的想法也可以写道评论区,有写错的地方望指正。宝宝们晚安🌹🌹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于FPGA的Cordic向量模式原理及设计

目录 一、向量模式 1、向量模式原理 1.1 1.2 2、向量模式的MATLAB仿真 3、向量模式的FPGA实现 3.1 预处理 3.2 迭代 3.3 结果计算 一、向量模式 1、向量模式原理 已知直角坐标下一点&#xff08;x&#xff0c;y&#xff09;&#xff0c;如何求该点在极坐标系的坐标&a…

问题1.用PGP解密出keybox.xml,过程中报“Can‘t check signature: No public key”如图,这个正常吗?如何解决?

问题1.我要写Google attenstation key到设备。就需要keybox.xml生成keybox.kdb文件。而测试机构给我们的是加密的文件&#xff0c;需要用PGP解密出keybox.xml&#xff0c;过程中报“Can’t check signature: No public key”如图&#xff0c;这个正常吗&#xff1f;如何解决&am…

真实前端面试题(蚂蚁外包)

1.闭包定义应用场景 闭包&#xff08;Closure&#xff09; 是指一个函数包含了对其外部作用域中变量的引用&#xff0c;即使在该函数外部作用域执行完毕后仍然可以访问这些变量。闭包允许你在一个函数内部访问另一个函数的变量&#xff0c;这在许多编程语言中是一种强大的特性…

IPv6 中 MAC 33:33 的由来

一、33:33 由来 1. RFC9542 - 2024-05-02 Note IANA allocates addresses under the IANA OUI (00-00-5E) as explained in [RFC9542]. Unicast addresses under the IANA OUI start with 00-00-5E, while multicast addresses under the IANA OUI start with 01-00-5E. In t…

React的列表和Key

React的列表 如果我们要在React中把一个数组转化成为我们的列表要怎么转换呢&#xff1f; 你可以通过使用 {} 在 JSX 内构建一个元素集合。 //定义一个NumberList组件 function NumberList(props) {//使用组件需要传入一个number值const numbers props.numbers;//使用 map(…

2024华为OD机试真题- 计算三叉搜索树的高度-(C++/Python)-C卷D卷-100分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。查找的规则是: 1.如果数小于节点的数减去500,则将数插入节点的左子树 2.如果数大于…

【OC】为category添加weak属性

友友们都知道&#xff0c;分类当中是不能添加property的&#xff0c;因为运行时系统不会自动完成synthesize&#xff0c;所以需要使用runtime的关联对象形式完成property。也就是这一对函数 /** 设置关联对象 param object &#xff1a; 添加属性的对象&#xff0c;通常填入se…

T200HSA单路SDI/HDMI+1路3.5音频高清万能采集卡

产品简介&#xff1a; 同三维T200HSA单路高清万能采集卡&#xff0c;可以采集1路SDI/HDMI高清信号1路3.5音频信号&#xff0c;卡上有1个是HDMI接口1个是SDI接口1个3.5音频口&#xff0c;配件有&#xff1a; 1个小档板&#xff0c;PCI-E2.0 X1&#xff0c;分辨率最高可以达到10…

机器学习模型评估之校准曲线

模型校准曲线&#xff08;Calibration Curve&#xff09;&#xff0c;也称为可靠性曲线&#xff08;Reliability Curve&#xff09;或概率校准曲线&#xff08;Probability Calibration Curve&#xff09;&#xff0c;是一种评估分类模型输出概率准确性的图形工具。它可以帮助我…

【python数据可视化】利用Python爬取天气数据并实现数据可视化,绘制天气轮播图

用Python爬虫抓取全年天气数据并绘制天气轮播图 一、运行结果&#xff1a; 二、代码展示&#xff1a; 由csv文件生成↓ 接下来是绘制天气轮播图 运行结果&#xff1a; 完整代码请看这里↓&#x1f447; 提醒制作这个项目你需要执行以下几个步骤&#xff1a; 确定数据源&#x…

OTN分层结构变成什么样了?

传统OTN的三层架构包括光传输段层&#xff08;OTS&#xff09;、光复用段层&#xff08;OMS&#xff09;和光通道层&#xff08;OCh&#xff09;&#xff0c;它们共同构成了OTN的三层结构。 其中&#xff1a; 光传输段层&#xff08;OTS&#xff09;&#xff1a;OTS是OTN中最高…

React是如何渲染元素和组件的

元素的概念 元素是构成 React 应用的最小单位。元素描述了你在屏幕上想看到的内容。React 元素是创建开销极小的普通对象。React DOM 会负责更新 DOM 来与 React 元素保持一致。 将一个元素渲染为 DOM 假设我们的 HTML 文件有一个根元素 <div>该节点内的所有内容都将由 …

鸿蒙 Web组件的生命周期(api10、11、12)

概述 开发者可以使用Web组件加载本地或者在线网页。 Web组件提供了丰富的组件生命周期回调接口&#xff0c;通过这些回调接口&#xff0c;开发者可以感知Web组件的生命周期状态变化&#xff0c;进行相关的业务处理。 Web组件的状态主要包括&#xff1a;Controller绑定到Web组…

力扣SQL50 平均售价 ifnull SUM 连表查询

Problem: 1251. 平均售价 &#x1f468;‍&#x1f3eb; 参考题解&#xff08;题目数据增强&#xff0c;代码只能过90%的点&#xff09; &#x1f37b; AC code SELECT p.product_id, ROUND(ifnull(SUM(units * price) / SUM(units), 0),2) AS average_price FROM prices a…

初学51单片机之数字秒表

不同数据类型间的相互转换 在C语言中&#xff0c;不同数据类型之间是可以混合运算的。当表达式中的数据类型不一致时&#xff0c;首先转换为同一类型&#xff0c;然后再进行计算。C语言有两种方式实现类型转换。一是自动类型转换&#xff0c;另外一种是强制类型转换。 转换的主…

2024GLEE生活暨教育(上海)博览会,8月20-22日,国家会展中心(上海)

2024GLEE生活暨教育(上海)博览会将于8月20-22日在中国国家会展中心&#xff08;上海&#xff09;举行&#xff0c;博览会总面积近万平方米&#xff0c;设有美好生活和教育产品两大主力展区&#xff0c;全面覆盖婴幼儿、学龄前、小学、初中、高中、大学、中年、老年各个年龄段的…

数据库复习重点

第一章通常涵盖数据库系统的基础概念&#xff0c;这里将概述数据库、数据库系统、数据库管理系统的基本概念&#xff0c;数据库系统的三级模式结构&#xff0c;以及数据模型的三要素。 基本概念 数据&#xff08;Data&#xff09;&#xff1a; 数据是描述事物的符号记录&#…

Nvidia Isaac Sim搭建仿真环境 入门教程 2024(4)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …

银行数仓项目实战(六)--基础层(完成存款的明细表---宽表)

文章目录 熟悉业务模型设计梳理映射关系加工宽表测试提交 FDM基础层&#xff1a;根据主题&#xff08;需求&#xff09;&#xff0c;将源数据加工集成&#xff0c;形成业务明细表–宽表 熟悉业务 当我们的工作来到基础层&#xff0c;我们首先要做的是跟甲方沟通&#xff0c;要…

未完工数据和系统数据对比分析

select * FROM ( select a.db_close_systime AS a_db_close_systime, -- 订单关闭时间 u.db_close_systime AS u_db_close_systime, -- 订单关闭时间 COALESCE( u.db_close_systime,a.db_close_systime) AS db_close_systime_coalesced ,-- 取非空值的订单关闭时间 a.i…