当前位置: 首页 > news >正文

数据结构链表力扣例题AC(2)——代码以及思路记录

206. 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

AC方法1

struct ListNode* reverseList(struct ListNode* head) {if(head == NULL)return NULL;struct ListNode* n1, *n2, *n3;n1 = NULL;n2 = head;n3 = head->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3){n3 = n3->next;}}return n1;
}

代码思路

观察示例,1->2->3->4->5 ==>> 5->4->3->2->1

要将箭头的方向都旋转,假设从左向右改变,第一步2->1,用两个指针 n1 和 n2 分别指向1和2,使 n2 指向 n1 就可以实现了,但是此时由于 2 之前保存的 3 的地址,现在保存了 1 的地址,3 的地址丢失了,因此在实现变换前,需要先将交换的两个数字后面一位的地址也保存下来,预防这种情况的发生。因为链表的末尾是指向NULL的,因此第一个也需要变为指向NULL,所以第一步将三个指针设置为 n1 = NULL, n2 = head,n3 = head->next。考虑结束条件,如果是 n3 指向空的话,此时 n2 刚指向最后一个元素,最后一个元素依然指向NULL,因此结束条件设置为 n2 指向空更合适。改变链表方向时,将 n2 指向 n1 (n2->next = n1,改变了箭头方向),再将 n1 、n2 和 n3 向前移动(n1 = n2;n2 = n3),但是这里要考虑 n3 向前移动的特殊情况,因为结束条件是 n2 指向空(说明箭头方向都已经完成变换),但是 n2 移动到NULL之前,n3 会先指向NULL,当 n2 指向 NULL的时候,n3也跟着移动就会发生错误(NULL->next是绝对错误的),因此加一个判断,当 n3 已经为空的时候就不移动了。此时原来的最后一个元素是第一个元素,也就是该链表的地址,n1 指向他,返回 n1 地址即可。

AC方法2

struct ListNode* cur, *newhead;cur = head;newhead = NULL;while(cur){struct ListNode* next = cur->next;cur->next = newhead;newhead = cur;cur = next;}return newhead;

代码思路

联想一下栈的原理,进栈和出栈是不是就顺序相反,因此可以创建一个新的空链表,从原链表第一个节点开始加入新链表,因此需要将头结点的下一个节点存储(因为头结点会保存新链表的节点地址),创建cur指向头结点,新链表由于是空,指向NULL;接着开始向新链表添加,先创建一个新指针保存cur的下一个节点(next = cur->next),然后将原链表第一个移动到新链表里面进行头插(cur->next = newhead,这一步就是相当于头插),然后更新了新链表的头结点后,对应的指向头结点的指针newhead移动指向新的头结点(newhead = cur;)cur回到原链表,指向next保存的新节点。由于cur是添加到新链表以后再回到原链表,因此当cur指向NULL的时候就可以停止了,因此作为while循环条件,最后返回新链表的头结点地址就是变换了顺序的链表的地址了。

链表中倒数第k个结点

输入一个链表,输出该链表中倒数第k个结点。

AC

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code herestruct ListNode* fast = pListHead;struct ListNode* slow = pListHead;for(int i = 0; i < k; i++){if(fast == NULL){return NULL;}fast = fast->next;}while(fast){fast = fast->next;slow = slow->next;}return slow;
}

代码思路

这道题用快慢指针的方法就非常妙,先简单说说一般思路:先创建一个指针将链表遍历一遍得出链表长度,再用链表长度减去 k 得出正数是第几个,然后输出正数的节点。

但如果使用快慢指针:fast 指针和 slow 指针最开始都指向头结点,先让 fast 指针走 k 个节点,此时 fast 指针和 slow 指针间就有 k 个节点距离,接着让 fast 和 slow 指针同时向前走,这个过程中两个指针之间始终保持着 k 个距离,因此当 fast 指针走到最后的时候,slow 指针正好处于倒数第 k 个。不过有特殊情况需要考虑,就是如果 k 大于了链表节点数,结果是输出空指针,因此在 fast 移动的时候就去检验他会不会等于空,如果 fast 等于空了直接 return NULL,因为k大于链表节点数,那么 i 还没有大于等于 k ,fast 就已经变为 NULL 了。其次还有 k=0 的情况,这时候进不去 for 循环,但是可以进去 while 循环,也就是快慢指针同时走了,fast=NULL 的时候 slow 也为 NULL 了,最后返回 slow 也就是返回空了。

这道题只写快慢指针的方法,有兴趣的实现第一种简单思想的,以练算法为主就不暴力了

相关文章:

数据结构链表力扣例题AC(2)——代码以及思路记录

206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 AC方法1 struct ListNode* reverseList(struct ListNode* head) {if(head NULL)return NULL;struct ListNode* n1, *n2, *n3;n1 NULL;n2 head;n3 head->next;while…...

C++面试宝典第30题:分发饼干

题目 假设你是一位非常棒的家长,想要给你的孩子们分发一些小饼干。但是,每个孩子最多只能给一块饼干。对每一个孩子i,都有一个胃口值gi,这是能让孩子们满足胃口的饼干的最小尺寸。对每一块饼干j,都有一个尺寸sj。如果sj >= gi,我们就可以将这个饼干j分配给孩子i,这个…...

文件包含+文件上传漏洞(图片马绕过)

目录 一.文件包含二.文件上传三.图片马四.题目 一.文件包含 将已有的代码以文件形式包含到某个指定的代码中&#xff0c;从而使用其中的代码或者数据&#xff0c;一般是为了方便直接调用所需文件&#xff0c;文件包含的存在使得开发变得更加灵活和方便&#xff08;若对用户输入…...

华为配置旁挂二层组网隧道转发示例

配置旁挂二层组网隧道转发示例 组网图形 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不影响用户的业务使用。 组网需求 AC组…...

Postgresql源码(123)事务提交时三段资源释放分析ResourceOwnerRelease

0 总结 三段释放原因&#xff1a;因为如果先释放锁&#xff0c;没有释放一些共享资源&#xff08;比如pin住的buffer&#xff09;&#xff0c;别人拿到锁后发现我们仍然持有一些资源&#xff0c;就会有问题。所以三阶段释放主要是以锁为分界线&#xff0c;先释放锁保护的资源&…...

电脑文件误删除如何恢复?2024最新三种恢复方法

我们在使用电脑的过程中&#xff0c;随着时间的不断推移&#xff0c;渐渐的我们会发现C盘内存空间不足了。这是因为我们很多文件都默认存储在C盘&#xff0c;所以导致C盘空间不足&#xff0c;电脑运行越来越慢。那么电脑哪些文件可以删除&#xff0c;电脑删除的东西怎么恢复&am…...

Netty应用——Google Protobuf强化篇(二十)

Protobuf发送一种实例 客户端可以发送一个 Student PoJo 对象到服务器 (通过 Protobuf 编码)服务端能接收 Student PoJo 对象&#xff0c;并显示信息(通过 Protobuf 解码) Student.proto syntax "proto3"; //版本 option java_outer_classname "StudentPOJO&…...

SpringAMQP开启“可靠性”机制

前言 上一篇介绍了如何在 《SpringBoot 中集成和使用消息队列》&#xff0c;看过这一篇就基本上可以在SpringBoot中使用消息队列了&#xff0c;但是消息队列他归根结底是一个客户端服务器模式的中间件&#xff0c;面对复杂的网络环境和分布式使用环境&#xff0c;难免会出现各…...

戴尔Dell R740服务器开机冒烟亮黄灯故障维修

今天分享的是一台过保修期的DELL PowerEdge R740服务器开机冒烟的维修案例。先上图&#xff1a; 接到用户报修后工程师立即响应&#xff0c;由于用户也是刚开工第一天服务器开机就出现了这种祥龙吐雾的祥兆&#xff0c;导致工厂业务流程无法正常使用&#xff0c;这台机器在东莞…...

【阅读笔记】空域保边降噪《Side Window Filtering》

1、保边滤波背景 保边滤波器的代表包括双边滤波、引导滤波&#xff0c;但是这类滤波器有一个问题&#xff0c;它们均将待处理的像素点放在了方形滤波窗口的中心。但如果待处理的像素位于图像纹理或者边缘&#xff0c;方形滤波核卷积的处理结果会导致这个边缘变模糊。 基于这个…...

vue3前端excel导出;组件表格,自定义表格导出;Vue3 + xlsx + xlsx-style

当画面有自定义的表格或者样式过于复杂的表格时&#xff0c;导出功能可以由前端实现 1. 使用的插件 &#xff1a; sheet.js-xlsx 文档地址&#xff1a;https://docs.sheetjs.com/ 中文地址&#xff1a;https://geekdaxue.co/read/SheetJS-docs-zh/README.md xlsx-style&#…...

npm install一直卡在 sill idealTree buildDeps

当npm install命令在安装过程中卡在sill idealTree buildDeps阶段时&#xff0c;可能的原因包括网络延迟、镜像源问题或缓存问题。以下是一些可能的解决方法&#xff1a; 检查镜像源&#xff1a; 打开命令提示符&#xff08;cmd&#xff09;窗口。 输入命令npm config get…...

spring boot rabbitmq常用配置

直接上代码 package com.example.demo;import org.aopalliance.aop.Advice; import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframewo…...

MySQL学习记录——십삼 视图及用户、权限管理

文章目录 1、视图2、用户管理3、权限管理 1、视图 视图把查询出来的结果以表结构的形式存储起来&#xff0c;视图和基表有关系&#xff0c;两者的数据变化都会互相影响。 在查询时&#xff0c;假如要经常查询一条记录&#xff0c;select …&#xff0c;那么为了方便&#xff…...

PyCharm 自动添加文件头注释

PyCharm 自动添加文件头注释 1. File and Code Templates2. Python FileReferences 1. File and Code Templates File -> Settings -> Editor -> File and Code Templates -> Python Script Reformat according to style & Enable Live Templates Created by…...

用HTML Canvas和JavaScript创建美丽的花朵动画效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>炫酷花朵</title><style>* {margin: 0;padding: 0;overflow: hidden;bac…...

java----js常用的api

java----js常用的api 时间函数获取当前时间: DateUtil.today()时间偏移字符换时间格式化 map.computeIfAbsent添加list 时间函数 获取当前时间: DateUtil.today() String todayDateUtil.today()String today “2024-02-01”; 时间偏移 往前退役30天 DateUtil.offsetDay(D…...

unity 使用VS Code 开发,VS Code配置注意事项

vscode 对应的插件&#xff08;unity开发&#xff09; 插件&#xff1a;.Net Install Tool,c#,c# Dev Kit,IntelliCode For C# Dev Kit,Unity,Unity Code Snippets 本人现在是用了这些插件 unity需要安装Visual Studio Editor 1、.Net Install Tool 设置 需要在设置里面配置…...

领域驱动设计(Domain Driven Design)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、场景和要求二、领域模型关键词1.领域2.子域3.通用语言4.限界上下文5.领域模型6.实体和值对象7.聚合根8.领域服务9.领域事件 总结 前言 Domain Driven Desi…...

CF778A String Game 题解

文章目录 CF778A String Game 题解题面翻译Input DataOutput DataInput Sample 1Output Sample 1题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示算法&#xff1a;二分代码&#xff1a; CF778A String Game 题解 link 题面翻译 …...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...