代码随想录训练营第四天

news2024/11/16 11:35:32

专题:链表

题目:两两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

例如:

 

 

 

题目分析

 要两两交换链表中的结点,怎么操作呢?我们使用cur指向虚拟头节点,对虚拟头节点的后两个结点进行翻转操作。然后cur往后移动两个位置,继续操作当前结点的后两个结点。依次循换直到全部的结点翻转过来直到cur的->next或cur->next->next=NULL循环结束(如果cur->next为空的话,说明cur就是最后一个结点,不要在翻转,如果cur->next->next =nullptrd的话说明cur后面只有一个结点了,也不用翻转了)。具体操作:先得用临时指针temp 和temp1保存 head 和 下下一结点,因为要改变dummyhead->next 的指向 不保存head的话,就找不到了。因为要改变下一结点的指向,不保存下下一结点指针的话,也就找不见了。保存了之后。然后依照①②③的顺序去执行。然后更新cur=cur->next->next;

细节注意:

注意:

使用虚拟头结点,就可以满足对链表每个结点的统一操作;

判断条件是链表结点有后两个结点才会满足翻转的条件。怎么判断呢?(cur->next != nullptr || cur->next->next != nullptr) ; 

在执行翻转操作时,铭记一旦执行一个翻转的步奏,那么链表结点就会产生一次变化。所以要根据最新的链表信息来写后面的语句。

代码实现:

题目:删除链表的倒数第N个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 

输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 

输入:head = [1], n = 1 输出:[ ]

题目分析:

快慢指针法:快慢指针fast slow 指向head;先让快指针走到第n个结点。然后快指针不为空的情况下,快慢指针都往后走,直到快指针指向空。此时慢指针指向的就是,倒数第n个结点的前一个结点,然后操作倒数第n个结点的前一个结点,指向倒数第n个结点的下一个结点。然后完成了删除倒数第n个结点的操作。

细节注意

这个题目,让我第一次发现,编译器是一个老实人,不管你用心写的,还是随意写的,编译器就只会老老实实的根据你的代码去做事情。所以一旦发现编译器,没执行通过。不要怀疑老实本分的编译器,好好看看自己的代码,找到问题,修改正确。编译器就能通过。

注意事项:链表的节点的把握,快慢指针指向dummyhead 还是 dummyhead->next.怎么设计才能让fast走到null的同时,slow刚好到倒数第n个结点的前一个结点位置。这个必须明白。

如果 fast slow 都指向 dummyhead 那么 此时判断条件就是 fast->next != nullptr,fast=fast->next;slow=slow->next;

如果 slow 指向 dummyhead ,fast 指向 dummyhead->next ;那么 此时判断条件就是 fast!= nullptr,fast=fast->next;slow=slow->next;

记住要让fast先走n步;

代码实现

 题目:链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

 题目分析:

首先计算两个链表的长度,长的减短的,算出个数差,然后定义两个指针,分别指向这两个链表。先让长的链表的指针,往后走他两的差的步子,然后他两一起往后走,如果能遇到即他两个指针相等,说明就找到了相遇的地方。如果指针一直都不相等,说明没有相交的结点。

细节注意:

思想简单,但是要

一定注意,在统计完链表长度之后,一定要让cura,curb指向原来的链表头。

之后交换的时候,目的就是为了,明确让cura去指向长的链表,curb去指向短的链表。方便后面减法操作。

代码实现:

 题目:循环链表

题意: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

题目解析

首先你要深刻理解,原理!!!

fast指针一次走两步的条件是(fast!=nullptr && fast->next != nullptr)保证了这个条件,那么fast->next->next这个位置,可以有值,也可以是NULL。没关系,都可以让fast去指向这个位置即 fast-->next = fast->next->nextr->next;

两个指针fast 和 slow 都指向head节点,然后fast一次走两步,slow一次走一步。然后如果有环的话,fast ,slow 肯定就相遇了。因为如果有环的话,fast最后在环里面一次走两步,slow在环里面一次走一步,那么相当于slow在环里面不动,fast一次走一步,那么fast肯定可以和slow相遇。一旦相遇就说明肯定有环。

此时完成了是否有环的判断!!!!!!!

还有就是如何寻找环的入口????

根据公式计算,最终得到当n=1时,x=z;即head到环入口的距离等于fast和slow相遇点到环入口的距离。根据这个条件,我们设置两个指针index1,index2.一个指向head,一个指向fast,slow相遇点。然后while(index1 != index2)就都往后走一步,直到index1 = index2 返回index2;也就是环的入口。

 由题意得:2(x+y) = x+y+n(z+y)

           得: x+y =n(z+y)

                   x = nz +(n-1)y

           当n=1时,得 x=z;

这就意味着,从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点

代码实现:

 一个关键点:对于index1和index2,这个点。要在if条件里面就去定义它,执行它。在一个大括号里面定义的变量,在大口号外面使用不了????对的!!认真思考!!!

录友告诉我,大括号里面定义的变量,出了大括号就不能使用了,是吧。

答:变量只在定义及“}"之前有效。  一起学习,就是快乐!!!!

 

今天,在训练营里面提问,录友回答了我的疑问,让人感觉很爽!!!

一起学习是一件狠狠快乐的事情!!!!!!!!!!!!1

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

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

相关文章

python opencv 找到圆点标定板所有点后通过距离找两个角点6

先对大图中的标定板框选,然后再标定计算 工程目录结构 如果提示没有win32gui则 pip install pywin32 如果是conda的环境则 conda install pywin32 drawROI.py import copy import jsonimport cv2 import numpy as np import os import matplotlib.pyplot as plt f…

【计算机视觉】Keras API和Tensorflow API的讲解(超详细必看)

觉得有帮助麻烦点赞关注收藏~~~ 一、Keras API Keras是一个用Python编写的高级神经网络API,它能够以Tensorflow、CNTK或者Theano作为后端运行,是一个模块化,最小化并且非常容易扩展的架构,它的开发者Francois Chollet说&#xff…

ESP32 ESP-IDF LVGL8.3.3 ST7735颜色修正

陈拓 2022/12/07-2022/12/10 1. 概述 在《ESP32 ESP-IDF LVGL8.3.3移植(ST7735)》 ESP32 ESP-IDF LVGL8.3.3移植_晨之清风的博客-CSDN博客ESP32 ESP-IDF LVGL8.3.3移植。https://blog.csdn.net/chentuo2000/article/details/128269394?spm1001.2014.3001.5502​​​​​​​…

Python 工匠 第四章 条件分支控制流

基础知识 分支惯用写法 没必要显式和布尔值比较,直接: if user.is_active:pass省略零值判断 if containers_count 0: --> if not containers_count: # 因为bool(0): False但是两者仍有不同 前者只有为0的时候才满足条件 后者则扩大到0, None, 空…

说说Vue-Router和Vue组件中的name属性的使用区别

目录 ⏬ Vue路由匹配规则routes中的name属性的使用 1. 指定页面路由,并传递参数 2. 获取组件的name值,以供页面使用 3. 同个路由,渲染多个视图 ⏬ vue组件中name的使用 1、组件递归操作 2、配合keep-alive对组件缓存做限制 3、在dev-to…

SpringBoot---错误处理机制

PostManHttp请求模拟工具,软件下载链接如下 PostMan下载链接 如果是其他客户端,默认响应一个JSON数据 原理-----SpirngMVC错误处理的自动配置 可以参照ErrorMvcAutoConfiguration;错误处理的自动配置; 给容器中添加了以下组件: …

基于51单片机的多功能电子时钟设计

设计任务: 1、设计任务:利用单片机、时钟芯片 DS1302、温度传感器 DS18B20、1602 液晶 等实现日期、时间、温度的显示即一个简单的万年历。 2、设计要求 (1)通过 DS1302 能够准确的计时,时间可调并在液晶上显示出来…

RK3568平台开发系列讲解(驱动基础篇)Linux内核面向对象思想之封装

🚀返回专栏总目录 文章目录 一、链表的抽象与封装二、设备管理模型的抽象与封装三、总线设备模型的抽象与封装沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux内核虽然是使用C语言实现的,但是内核中的很多子系统、模块在实现过程中处处体现了面向对象编程思想。…

动态规划:将题目转换为01背包问题

文章目录494. 目标和474. 一和零494. 目标和 力扣传送门: https://leetcode.cn/problems/target-sum/ 题目描述: 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ ,然后串联起所有整数,可以…

easyrecovery2023最新免费版电脑数据恢复软件使用教程

easyrecovery2023版能实现多种不同格式的完成修复和进程的解决,能进行数据的操作和保存解决完成,通过不同的内容进行操作,能解决大部分的使用问题,能安全的进行保存。easyrecovery免安装版对于多种格式下的内容,能对多…

nacos注册中心和配置中心

nacos注册中心和配置中心 nacos 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 nacos官方文档:https://nacos.io/zh-cn/ 相关概念:https://nacos.io/zh-cn/docs/architecture.html nacos是AP架构,注重可用性和分区容错性&#…

腾讯云双十二服务器2核2G、2核4G、4核8G、8核16G、16核32G配置价格表出炉

现在腾讯云服务器2核2G、2核4G、4核8G、8核16G、16核32G配置价格表已经出来了,大家可以参考一下。腾讯云轻量应用服务器为轻量级的云服务器,使用门槛低,按套餐形式购买,轻量应用服务器套餐自带的公网带宽较大,4M、6M、…

​软件测试之“支付功能”测试

01 测试思维 要分析测试点之前,我们先来梳理一下测试思维。总结来说,任何事物的测试思路都可以总结如下: 第一步:梳理产品的核心业务流程:明白这是个什么项目,实现了什么业务,以及是怎么实现的…

电动汽车电池换电站选址与定容(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🎉作者研究:🏅🏅🏅主要研究方向是电力系统和智能算法、机器学…

python学习笔记(13)---(IO对象序列化)面向对象

目录 面向对象---第十一章 IO对象序列化 1.IO流(IO stream) 2.open()方法 3.写入方法:write() 4.对象序列化 面向对象---第十一章 IO对象序列化 1.IO流(IO stream) (1&…

编译原理实验三:算符优先分析算法的设计与实现

实验三 算符优先分析算法的设计与实现 一、 实验目的 根据算符优先分析法,对表达式进行语法分析,使其能够判断一个表达式是否正确。通过算符优先分析方法的实现,加深对自下而上语法分析方法的理解。 二、 实验要求 1、输入文法。可以是如下…

Java 图片上传后为什么会自动旋转90度?

问题: 用户反馈上传后的图片方向不对,起初怀疑是本身图片方向有问题,但是用windows图片查看器打开图片方向是"正常"显示的? 分析: windows默认的图片查看器已经帮我们自动旋转展示了,我们在手机横拍或者扫…

【Vue核心】7.事件处理

事件处理的基本使用 绑定监听 v-on:xxx“fun” xxx“fun” xxx“fun(参数)” 默认事件形参: event 隐含属性对象: $event 绑定方法说明 使用v-on:xxx 或xxx绑定事件,其中xxx是事件名;事件的回调需要配置在methods对象中,最终公在vm上;methods中配置的函数,不要用箭头函…

python 调试IGH库

如何通过python来调试IGH的库呢? 可以使用如下的代码,测试请求主站,把主站变成激活状态。其他的函数也可以类似的一步一步调用。 结果如下: from ctypes import * ighCDLL("/home/cheni/lichuan_bujin/libethercat.so&quo…