【代码随想录】算法训练营 第四天 第二章 链表 Part 2

news2025/7/20 18:22:00

24. 两两交换链表中的节点

思路

为了使得头结点的处理不用特殊化,所以依然设置一个虚拟头结点dummy,每次要交换的时候都要判断接下来的两个结点是否为空结点,即nullptr,若非空即可交换;

交换的时候,用一个指针保存第一个结点,用另一个指针保存两个结点后的一个结点,为什么不保存第二个用于交换的结点呢?因为在后面重新连接结点时,前一个结点必须连接第三个结点,所以得先存着,不然交换后就找不到了。

代码

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* cur = dummy;
        while (cur->next != nullptr && cur->next->next != nullptr) {
            ListNode* tmp1 = cur->next; // 暂存要交换的第一个结点
            ListNode* tmp2 = cur->next->next->next; // 暂存交换结点的后一个结点
            cur->next = cur->next->next;
            cur->next->next = tmp1;
            cur->next->next->next = tmp2; // 从第一个开始,三个找下家
            cur = cur->next->next; 
        }
        return dummy->next;
    }
};

19. 删除链表的倒数第N个结点

题目

思路

使用双指针法,一快一慢,快的在前面跑,离慢的要有n+1个结点,这样的话,如果快指针指到空了,就可以删除慢指针指向结点的下一个结点;

这里依然需要设置虚拟头结点,而且快指针要先跑n个结点后,再跑到下一个结点,前n个结点要保证快指针指向的结点非空,因为题目都要求倒数第n个了,所以至少也要有n个非空结点,接下来再往下跑一个的话就不用保证了,空也可以。

代码

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* fast = dummy;
        ListNode* slow = dummy;
        while (n-- && fast != nullptr) {
            fast = fast->next;
        }
        fast = fast->next;
        while (fast != nullptr) {
            fast = fast->next;
            slow = slow->next;
        }
        ListNode* tmp = slow->next;
        slow->next = slow->next->next;
        delete tmp;
        return dummy->next;

    }
};

面试题 02.07. 链表相交

题目

思路

这道题也用不上算法,因为两个链表要么存在最后几个结点全部相同,要不就不存在相交,所以可以先将两个链表中长的一条缩短到短的那条的长度,那样就可以对剩下的相同长度的结点进行一一比较了,只要遇到相同的结点,就直接返回这个结点的指针即可,因为这道题中不会出现其他特殊情况。

代码

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* curA = headA;
        ListNode* curB = headB;
        int lenA = 0, lenB = 0;
        while (curA != nullptr) {
            lenA++;
            curA = curA->next;
        } 
        while (curB != nullptr) {
            lenB++;
            curB = curB->next;
        }
        curA = headA;
        curB = headB;
        if (lenB > lenA) {
            swap (lenB, lenA);
            swap (curB, curA);
        }
        int gap = lenA - lenB;
        while (gap--) {
            curA = curA->next;
        }
        while (curA != nullptr) {
            if (curA == curB) {
                return curA;
            }
            curA = curA->next;
            curB = curB->next;
        }
        return NULL;
    }
};

142. 环形链表 ll

题目

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

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

相关文章

基于springboot实现汉服文化分享平台项目【项目源码+论文说明】

摘要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述汉服文化平台网站的当前背景以及系统开发的…

PostgreSQL性能调优:优化查询和索引设计

随着数据量的增长和业务需求的变化,数据库性能成为了许多企业关注的焦点之一。在众多的数据库管理系统中,PostgreSQL因其稳定性和可靠性而备受青睐。然而,即使是最强大的系统也需要合适的调优,以确保其能够高效地处理大规模数据和…

离线 notepad++ 添加到右键菜单

复制下面代码,修改文件后缀名为:reg Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\NotePad] "Notepad" "Icon""D:\\Notepad\\notepad.exe,0"[HKEY_CLASSES_ROOT\*\shell\NotePad\Command] "D:\…

从旅游发展大会,看长沙的“落子”与“棋道”

文|新熔财经 作者|石榴 中秋国庆假期作为今年的最后一个小长假,全国各地果断祭出自己的“杀手锏”,不过,虽是百花齐放,但星城长沙仍然是最亮眼的存在之一。 全省文化旅游统计监测系统显示,中…

基于梯度优化的BP神经网络(分类应用) - 附代码

基于梯度优化的BP神经网络(分类应用) - 附代码 文章目录 基于梯度优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.梯度优化BP神经网络3.1 BP神经网络参数设置3.2 梯度算法应用 4.测试结果:5.M…

安科瑞为工业能效提升行动计划提供EMS解决方案

安科瑞 崔丽洁 摘要 2022年6月29日工信部、发改委、财政部、生态环境部、国资委、市场监管总局六部门联合下发《关于印发工业能效提升行动计划的通知》(工信部联节〔2022〕76号,以下简称《行动计划》),主要目的是为了提高工业领域…

HTML三叉戟,标签、元素、属性各个的意义是什么?

🌟🌟🌟 专栏详解 🎉 🎉 🎉 欢迎来到前端开发之旅专栏! 不管你是完全小白,还是有一点经验的开发者,在这里你会了解到最简单易懂的语言,与你分享有关前端技术和…

基于水基湍流优化的BP神经网络(分类应用) - 附代码

基于水基湍流优化的BP神经网络(分类应用) - 附代码 文章目录 基于水基湍流优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.水基湍流优化BP神经网络3.1 BP神经网络参数设置3.2 水基湍流算法应用 4.测试结果…

视频监控管理平台EasyCVR二级菜单隐藏后,鼠标悬浮时菜单名称不显示该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…

测试工程师应具备何种心态?

无论是在工作或是在生活当中,心态一词,常常被提及,而我们也经常听到各种各样的声音,要保持一个良好的心态等等。但是通常都是一些比较飘渺的说法,因为是相对统一和总论式的概述,并不是针对特定情况下的论述…

ubuntu20.04下Kafka安装部署及基础使用

Ubuntu安装kafka基础使用 kafka 安装环境基础安装下载kafka解压文件修改配置文件启动kafka创建主题查看主题发送消息接收消息 工具测试kafka Assistant 工具连接测试基础连接连接成功查看topic查看消息查看分区查看消费组 Idea 工具测试基础信息配置信息当前消费组发送消息消费…

代理服务器没有响应,谷歌浏览器无法上网【搬代码】

代理服务器没有响应 •检查你的代理设置127.0.0.1:8888。 转到“工具”>“Internet 选项”>“连接”。如果你在 LAN 中,请单击“局域网设置”。 •确保你的防火墙设置没有阻止 Web 访问。 •向你的系统管理员求助。 IE浏览器-设置-internet选项 然后就可…

CEC2013(MATLAB):墨西哥蝾螈优化算法(Mexican Axolotl Optimization,MAO)求解CEC2013

一、墨西哥蝾螈优化算法MAO 墨西哥蝾螈优化算法(Mexican Axolotl Optimization,MAO)由Yenny Villuendas-Rey 1等人于2021年提出,该算法具有较强的平衡全局搜索与局部搜索能力。 参考文献: [1]Villuendas-Rey, Yenny,…

汇川IT7000系列HMI使用脚本实现画面跳转时自动切换手自动模式

汇川IT7070E工业HMI使用实例(1) 用脚本切换模式 我们在使用工业HMI做画面时,可能会有这样的需求,希望切换画面时,可以根据不同的画面,自动切换相应的模式,比如有些画面是进行手动操作的,有些画面是进行自动操作的,当我们需要手动时,希望进入画面自动切换为“手动模…

【CANoe】TX Self-ACK自应答配置与CPAL实现

一、引言 在测试CAN&CANFD通信或者网络管理的时候,我们经常遇到使用报文(网络管理报文或者通信报文)唤醒被测件这个测试点,如果测试比较多的情况下,我们就会发现,如果CANoe没有接被测件或者被测件没有…

SBD(Schottky Barrier Diode)与JBS(Junction Barrier Schottky)

SBD和JBS二极管都是功率二极管,具有单向导电性,在电路中主要用于整流、箝位、续流等应用。两者的主要区别在于结构和性能。 结构 SBD是肖特基二极管的简称,其结构由一个金属和一个半导体形成的金属-半导体结构成。 JBS是结势垒肖特基二极…

mycat的部署及测试 (读写分离)

声明:读写分离并不局限于主从复制的服务器,主从复制的服务器只是给读写分离又添加了一层保护,本实验做的是没有主从复制的服务器,如果有需求 欢迎大家尝试 私信! 一.基本概念 Mycat 介绍:是数据库中间件,就…

C++<内存管理>

​ ​ ✨前言✨ 🎓作者:【 教主 】 📜文章推荐: ☕博主水平有限,如有错误,恳请斧正。 📌机会总是留给有准备的人,越努力,越幸运! 💦导航助手&…

会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局

flex弹性布局轮播图后台数据获取及组件使用(后台数据交互mockjs)首页布局 1.flex弹性布局 什么是flex布局? 1) Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。 2) 任何一个容器都可以指…

Nginx的安装——Linux环境

1、安装gcc nginx源码的编译依赖于gcc 环境,如果没有 gcc 环境,则需要安装: yum install gcc-c 2、PCRE pcre-devel 安装 PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 htt…