经典链表试题(二)

news2024/11/15 13:24:37

文章目录

  • 一、移除链表元素
    • 1、题目介绍
    • 2、思路讲解
    • 3、代码实现
  • 二、反转链表
    • 1、题目介绍
    • 2、思路讲解
    • 3、代码实现
  • 三、相交链表
    • 1、题目介绍
    • 2、思路讲解
    • 3、代码实现
  • 四、链表的中间结点
    • 1、题目介绍
    • 2、思路讲解
    • 3、代码实现
  • 五、设计循环队列
    • 1、题目介绍
    • 2、思路讲解
    • 3、代码实现
  • 六、两两交换链表中的节点
    • 1、题目介绍
    • 2、思路讲解
    • 3、代码实现


一、移除链表元素

1、题目介绍

在这里插入图片描述

在这里插入图片描述


2、思路讲解

定义两个指针cur和prev,cur指向head,以cur为条件,进行遍历循环,分为cur的值等于val和不等于val两种情况,分别处理。


3、代码实现

在这里插入图片描述


二、反转链表

1、题目介绍

在这里插入图片描述
在这里插入图片描述


2、思路讲解

定义三个指针,cur指向头结点,newHead指向空,next指向cur的下一个结点,遍历cur,最后返回newHead。


3、代码实现

在这里插入图片描述


三、相交链表

1、题目介绍

在这里插入图片描述
在这里插入图片描述


2、思路讲解

先求出链表1和链表2的长度,和判断他们是否最后相等,如果不相等就不存在橡胶链表,然后将链表长的那个,走两链表长度之差,最后看他们在哪里相等,哪里就是第一个相交链表


3、代码实现

在这里插入图片描述


四、链表的中间结点

1、题目介绍

在这里插入图片描述
在这里插入图片描述


2、思路讲解

定义快慢指针,当快指针未空时,返回慢指针。


3、代码实现

在这里插入图片描述


五、设计循环队列

1、题目介绍

在这里插入图片描述
在这里插入图片描述


2、思路讲解

我们同样可以用链表实现队列,用链表实现队列则较为简单,因为链表可以在 O(1)O(1)O(1) 时间复杂度完成插入与删除。入队列时,将新的元素插入到链表的尾部;出队列时,将链表的头节点返回,并将头节点指向下一个节点。


3、代码实现

typedef struct {
    int* a;
    int front;
    int rear;
    int k;

} MyCircularQueue;


MyCircularQueue* myCircularQueueCreate(int k) {
    MyCircularQueue* obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));
    obj->a=(int*)malloc(sizeof(int)*(k+1));
    obj->rear=obj->front=0;
    obj->k=k;
    return obj;
}
bool myCircularQueueIsFull(MyCircularQueue* obj) {

    return ((obj->rear+1)%(obj->k+1))==(obj->front);
}
 bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    return obj->rear==obj->front;

}
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
   if(myCircularQueueIsFull(obj))
   {
       return false;
   }
    obj->a[obj->rear]=value;
    obj->rear++;
    (obj->rear)%=(obj->k+1);
    return true;
}
bool myCircularQueueDeQueue(MyCircularQueue* obj) {
     if(myCircularQueueIsEmpty(obj))
    return  false ;

    obj->front++;
    (obj->front)%=(obj->k+1);
    return true;

}

int myCircularQueueFront(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
    return -1;


     else
    return obj->a[obj->front];

}

int myCircularQueueRear(MyCircularQueue* obj) {
     if(myCircularQueueIsEmpty(obj))
    return -1;

    else
    return obj->a[(obj->rear+obj->k)%(obj->k+1)];

}

void myCircularQueueFree(MyCircularQueue* obj) {
    free(obj->a);
    free(obj);
}


六、两两交换链表中的节点

1、题目介绍

在这里插入图片描述

在这里插入图片描述


2、思路讲解

可以通过递归的方式实现两两交换链表中的节点。

递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换。

如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。


3、代码实现

在这里插入图片描述


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

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

相关文章

酸纯化APU系统在阳极氧化酸回收中的应用

阳极氧化是一种涉及对金属(通常是铝)表面进行电化学处理的工艺,作为一种表面处理中常见且主要的技术,阳极氧化可增强其耐腐蚀性、硬度和耐磨性,从而提高铝合金的使用寿命和美观度。 常见的表面处理方法——阳极氧化 阳极氧化是以铝或铝合金制…

超简洁ubuntu linux 安装 cp2k

文章目录 打开下载网址解压接下来的步骤讲解 将解压的包移到对应路径下最后运行 打开下载网址 需要从github下载:下载网址 两个都可以从windows下先下载,再复制到linux中, 如果不能复制,右键这两个,复制链接&#xf…

C++数据结构X篇_19_排序基本概念及冒泡排序(重点是核心代码,冒泡是稳定的排序)

文章目录 1. 排序基本概念2. 冒泡排序2.1 核心代码2.2 冒泡排序代码2.3 查看冒泡排序的时间消耗2.4 冒泡排序改进版减小时间消耗 1. 排序基本概念 现实生活中排序很重要,例如:淘宝按条件搜索的结果展示等。 概念 排序是计算机内经常进行的一种操作,其目…

【Python二级-练习(详细版)】

python江湖 1、求长方形面积题目描述:代码如下: 2、随机密码验证题目描述:代码如下: 3、信息分配表(字典)题目描述:代码如下: 4、全模式分词(jieba)题目描述:…

2023年腾讯云双11活动云服务器价格表

2023年腾讯云双11活动已经拉开了序幕,腾讯云推出了一系列的优惠活动,下面给大家分享腾讯云双11活动云服务器价格表,对于有需要购买云服务器的用户来说,无疑是一份非常有价值的参考。 一、腾讯云双十一活动入口 活动入口&#xff…

Python:实现日历功能

背景 日常生活中,每天都要用到日历,日历成为我们生活中的必需品,那么如何制作日历呢,其实方法有很多,可以直接在excel中制作,也可以手画等等。 学习过编程的朋友,能否想到用Python编写一…

吐血整理,Jmeter服务端性能测试-线程阻塞问题案例分析(超细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Jstack打印快照…

vue3根据数据取消el-table选中状态获取到最新数据

原始数据: //el-table点击复选框事件 function getSelected(selection, row){//判断是否是已选过数据 0为没有选,>0有选过if(initial.value>0 ){let isCheck false //是否取消 true取消 false不取消//循环判断已选的数据是否包含当前点击获取到的…

相交链表-力扣

一、题目描述 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 二、题解 注意题目所说的相交,相交节点不只是数值上的相等,而是相交以后两条链变成一条链。 解决改题目,我们可以:…

APP 专项测试之兼容性测试

1、APP 兼容性测试认识 随着 APP 应用范围越来越广,用户群体越来越大,终端设备的型号也越来越多,移动终端碎片化加剧,使得 APP 兼容性测试成为测试质量保障必须要考虑的环节。 APP 兼容性测试通常会考虑:操作系统、厂…

分享从零开始学习网络设备配置--任务4.2 使用IPv6静态及默认路由实现网络连通

任务描述 某公司利用IPv6技术搭建网络,公司3个部门所有PC机连接在同一交换机上,PC1代表行政部划分到VLAN10中,PC2代表财务部划分到VLAN20中,PC3代表销售部划分到VLAN30中,R1代表公司出口路由器,R2模拟Inter…

【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)

零基础全方位带你学习探索Docker容器开发实战指南(底层实现系列) Docker简介对比虚拟化技术的优势 底层特性Linux Container(LXC)底层实现隔离性 Linux namespacepid namespace(隔离空间机制)net namespace…

Unity的碰撞检测(一)

(一)测试前准备工作 1.创建两个游戏对象,分别取名为”Player”和”Enemy”,并且为名为”Player”的游戏对象设置Tag也为”Player”,二者在场景中如图1所示: 图 1 绿为Enemy,红为Player 2.编写脚…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(二)

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明作者&#xff1…

理性推广 | C1N短网址帮您节省运营成本!

今天所讲便是利用短链接“低成本推广”帮你节省隐性成本。 什么是短链接 1.短链接起源 说起短链接起源不得不提到微博,在微博推出后因为有字数限制,一般字数不超过140字,所以微博内容如果发布很长的链接就会占用很多内容,根据这…

OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验

1. 介绍 感知哈希算法(Perceptual Hash Algorithm,简称pHash) 是哈希算法的一种,主要用来做相似图片的搜索工作。 2. 原理 感知哈希算法(pHash)首先将原图像缩小成一个固定大小的像素图像,然后…

嵌入式算法——傅里叶变换算法

文章引注 https://mp.weixin.qq.com/s/5VIpNWci9YLY3m4gcYd6-w 摘要 傅里叶变换的核心在于,“任何连续周期信号可以由一组适当的正弦曲线组合而成”,在这个基础上对信号的中特定频率的正弦波进行分解或者重组,基于频率方面分析波形。 1、傅…

java _JDBC 开发

目录 一.封装JDBCUtiles 二.事务 三.批处理 四.数据库连接池 C3P0 Druidf(德鲁伊)阿里 五.Apache-DBUtiles 六.Apache-DBUtils 七.DAO 和增删改查 通用方法 - BasicDao 一.封装JDBCUtiles 说明:在jdbc操作中,获取连接和释放资源&#…

民宿如何经营与管理?【民宿小程序】

随着旅游业的快速发展,越来越多的人选择经营民宿,将自己的房屋开放给旅客入住。然而,要成功经营一家民宿,并保持良好的运营状态,需要有效的管理和营销策略。在这个过程中,民宿小程序能够发挥重要作用。 民宿…

Python---练习:for循环 求1-100的和/所有偶数的和

案例: 使用for循环,求1 ~ 100的和 之前用while循环,做过算出1--100的和。 相关链接: Python--练习:使用while循环求1..100的和-CSDN博客 结合着看看for循环怎么实现。 思考: 先把for循环的基本语法写…