每日一练:两两交换链表中的节点

news2024/9/20 9:19:40

24. 两两交换链表中的节点 - 力扣(LeetCode)

一、题目要求

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

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

示例 2:

输入:head = []
输出:[]

示例 3:

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

提示:

  • 链表中节点的数目在范围 [0, 100] 内
  • 0 <= Node.val <= 100

二、解法1-三指针法 O(N)

        添加一个哨兵位,它的作用是记录头节点,然后交换逻辑如下:

        然后把next和first交换,整体再向后移动两个节点再次交换节点即可。

        注意如果next和first指针交换后,next的下一位是nullptr,后面就没有可交换的节点了。

        而如果next的下一位的下一位才是nullptr,那也只剩下一个节点,不需要交换了。

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(head == nullptr)
            return head;
        ListNode* Head = new ListNode(0,head); // 哨兵位
        ListNode* prev = Head;
        ListNode* first = head;
        ListNode* next = first->next;
        while(next)
        {
            prev->next = next;
            first->next = next->next;
            next->next = first;
            swap(first,next);
            // 整体向后移动两位
            next = next->next;
            if(next == nullptr) // 防止空指针的解引用
                break;
            next = next->next;
            prev = prev->next->next;
            first = first->next->next;
        }
        return Head->next;
    }
};

三、解法2-递归 O(N)

        递归就是从后往前进行两两交换,每次跳过两个节点,当只剩1个节点或者走到nullptr时返回。

        通过解法1我们知道first和next交换后,next反而在前面了,所以把next返回回去让上一组指向它。

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if (head == nullptr || head->next == nullptr) {
            return head;
        }
        ListNode* first = head;
        ListNode* next = first->next;

        first->next =  swapPairs(next->next); // 让first节点指向下一组的next
        next->next = first;
        return next; // 交换完毕后返回在前面的next,让上一组指向它
    }
};

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

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

相关文章

【网络】传输层协议UDP

一、再谈端口号 1.1 理解端口号 网络中两台主机进行通信的本质是主机的进程间进行通信&#xff0c;端口号标识了主机进行通信的不同的应用程序。 在 TCP/IP 协议中, 用 "源 IP", "源端口号", "目的 IP", "目的端口号", "协议号…

浅谈新型电力系统背景下虚拟电厂运营体系研究-安科瑞叶西平

摘要&#xff1a;随着智能电网关键技术以及自动需求响应技术的日益发展&#xff0c;分布式发电、储能、电动汽车、可控负荷等需求侧资源有望成为发电侧可调资源的有效替代资源&#xff0c;通过响应电力市场中的电价信号或政府和能源行业的政策激励参与需求响应项目的实施&#…

java重点学习-集合(List)

七 集合&#xff08;List&#xff09; 7.1 复杂度分析 7.2 数组 1.数组(Array)是一种用连续的内存空间存储相同数据类型 数据的线性数据结构。 2.数组下标为什么从0开始 寻址公式是:baseAddressi*dataTypeSize&#xff0c;计算下标的内存地址效率较高 3.查找的时间复杂度 随机(…

如何把提醒事项以倒数日的形式放在桌面上?

在快节奏的现代生活中&#xff0c;我们常常需要记住各种重要的日期和事件&#xff0c;比如会议、纪念日、项目截止日期等。如果能将这些提醒事项以倒计时的形式直接展示在桌面上&#xff0c;无疑会为我们的生活和工作带来极大的便利。这样的功能不仅可以帮助我们提前做好规划&a…

oracle 使用 PL/SQL Developer创建表并插入单条、多条数据

第一步&#xff1a;使用工具创建表&#xff08;前提是库已经创建好了&#xff09;&#xff1a;在当前用户下找到Tables 然后点击并右键&#xff0c;点击新建 写上表名&#xff0c;写上表名的注释 第二步添加字段&#xff1a;点击列&#xff0c;然后分别写上你自己需要的字段及名…

“跨越数据边界:企业级实时计算平台构想”——2024 DolphinDB 年度峰会演讲回顾

9 月 6 日&#xff0c;“以实时&#xff0c;见未来”2024 DolphinDB 年度峰会在杭州举办。DolphinDB 创始人、CEO 周小华博士为大家带来了主题为“跨越数据边界&#xff1a;企业级实时计算平台构想”的精彩演讲。 从最初的一站式大数据平台&#xff0c;到高性能时序数据库&…

个性化推送太多?OFGB帮你关闭,隐私无忧

随着win 11的推出&#xff0c;微软在提供新功能和改进的同时&#xff0c;也在系统中加入了各种形式的广告&#xff0c;这些广告虽然为微软带来了额外的收入&#xff0c;但却可能影响了我们的体验&#xff0c;甚至引起了一些不满。 在这样的背景下&#xff0c;开发者社区中出现…

第15-05章:获取运行时类的完整结构

我的后端学习大纲 我的Java学习大纲 6.1.第一组方法API: 1.API列表&#xff1a;java.lang.Class 类&#xff1a; 2.代码测试&#xff1a; public class ReflectionUtils{ puvblic static void main(String[] args){}// 第一组Testpublic void api_01{//上面截图的代码......…

MVVM 基础

文章目录 MVC 设计模式传统的 MVC 架构Cocoa version of MVCMVC 设计模式的几个指导原则 MVVM 设计模式IOS 上的应用鸿蒙上 MVVMAndroid Data binding 参考&#xff1a; MVC 设计模式 日常大家都会听到&#xff0c;名字很简单&#xff0c;但是很实用&#xff0c;日常 Android …

紧急警报 工厂水泵房深夜意外进水:物联网监控如何避免百万损失

紧急警报&#xff01;工厂水泵房深夜意外进水&#xff1a;物联网监控如何助力避免百万损失 在当今高度自动化的工业生产环境中&#xff0c;任何微小的异常都可能迅速升级为重大的安全事故&#xff0c;对企业的运营造成不可估量的影响。近期&#xff0c;一起发生在某大型制造工…

数据挖掘实战-基于朴素贝叶斯算法构建真假新闻分类模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

外包干了半年,快要废了。。。

先说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了半年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会让…

10个登录页面优化的案例研究和示例,激发你的灵感

什么是落地页优化&#xff0c;为什么它很重要&#xff1f; 落地页优化是一门将首次浏览转化为行动&#xff08;即转化率&#xff09;的艺术和科学。其主要目的是调整和微调您的数字欢迎界面&#xff0c;让每一位访问者都感受到这是为他们量身打造的。 这个过程不仅仅是简单的…

电脑监控软件系统有哪些?|2024年干货整理,赶紧码住!

在一家知名互联网公司里&#xff0c;由于缺乏有效的监管措施&#xff0c;一些员工利用工作时间进行与工作无关的活动&#xff0c;如网购、观看视频、玩游戏等小技怠工的情况&#xff0c;这种现象被称为“摸鱼”。 尽管表面上看似无害&#xff0c;但长期下来却严重拖累了整个团队…

Chisel简明教程

1. 简介 Chisel&#xff08;Scala嵌入式硬件构造语言&#xff09;是一种嵌入在高级编程语言Scala中的硬件构造语言。Chisel是一个特殊类定义、预定义对象和Scala内部使用约定的库&#xff0c;因此当你编写Chisel代码时&#xff0c;实际上是在编写一个构建硬件图的Scala程序。随…

也谈PCIe带宽问题

每每谈到PCIe速率的时候&#xff0c;必不可少要谈论的就是PCIe的带宽问题。互联网上也有很多帖子在谈这个事情&#xff0c;但总觉得差那么点意思。我从几个维度来讨论我的理解&#xff0c;希望有些信息能带给大家不一样的看法。先贴张PCIe速率提升图。 理论带宽、实际带宽、带宽…

掌握Transformer之学习各组件

01 引言 这是我关于Transformer系列的第二篇文章。在前一篇文章中&#xff0c;我们了解了Transformer结构的功能、相关架构及其相比于RNN架构的优势。在本文中&#xff0c;我们可以深入了解Transformer结构的工作原理。我们将通过实际的矩阵表示来了解数据如何在该结构内流动…

如何构建高效快速的数据同步策略方案

在数据化的商业环境中&#xff0c;实现数据的实时同步不仅是提升企业内部协作效率的关键&#xff0c;更是确保业务决策精准性和时效性的核心要素。通过确保数据的一致性和最新性&#xff0c;企业能够实现跨部门的无缝协作&#xff0c;从而为业务流程的顺畅运作和快速响应市场变…

比 GPT-4 便宜 187 倍的Mistral 7B (非广告)

Mistral 7B 是一种设计用来快速处理较长文本的人工智能模型。它采用了一些特别的技术来提高速度和效率&#xff0c;比如“分组查询注意力&#xff08;grouped-query attention&#xff09;”和“滑动窗口注意力&#xff08;sliding-window attention&#xff09;”。 这些技术…

python中如何打印日志信息推荐logaid库(强大的日志库)

一、安装 pip install logaid二、使用 只打印&#xff0c;不保存 from logaid import loglog.info(hello world) log.error(hello world) log.warning(hello world) log.fatal(hello world,123,{},[],False)开启超级print from logaid import log log.init(print_proTrue)prin…