news 2026/4/15 16:48:17

【剑斩OFFER】算法的暴力美学——两两交换链表中的结点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【剑斩OFFER】算法的暴力美学——两两交换链表中的结点

一、题目描述

二、算法原理

思路:引入哨兵位 + 3 个指针

为什么要引入哨兵位?当我们实现完第一次交换时:

prev 的 next 要指向 cur ,所以引入哨兵位,这样一次循环就能搞定交换两两结点;这里我为什么要引入 nnext ?其实是为了方便对两个结点时的交换。

循环结束的条件:

当结点为偶数时:next == nullptr 就结束循环

当结点为奇数时:cur == nullptr 就结束循环

三、代码实现

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { if(head == nullptr || head->next == nullptr) return head; ListNode* prev = new ListNode(0,head); ListNode* cur = head,*next = head->next,*nnext = next->next,*ret = next; while(cur && next) { next->next = cur; cur->next = nnext; prev->next = next;//对交换后的结点进行连接 prev = cur;//开始更新 cur 、prev 、 next 、nnext cur = nnext; if(cur) next = cur->next; else break; if(next) nnext = next->next; } return ret; } };

探索性代码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode* ret = nullptr; if(head == nullptr || head->next == nullptr) return head; else ret = head->next;//保存第一次交换的头结点 ListNode* prev = head; ListNode* cur = head->next; ListNode* tmpnode = nullptr; ListNode* swapnode = nullptr;//保存交换后的prev while(cur != nullptr)//使用临时变量来进行两两交换 { tmpnode = cur->next; cur->next = prev; prev->next = tmpnode; if(swapnode) swapnode->next = cur;//第二次,两两交换时,要把 prev 前一个结点链接上交换后的 cur swapnode = prev; prev = tmpnode; if(prev) cur = prev->next; else break; } return ret; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:54:03

基于腾讯元器搭建智能体“看图写诗词专家”Agent智能体搭建笔记

本文系统梳理基于腾讯元器平台构建“看图写诗词专家”智能体的全流程实操要点,涵盖前期需求锚定、核心功能搭建、Multi_Agent关系配置、测试优化及运维保障等关键环节。该智能体采用Multi_Agent模式开发,核心定位为“图文意境适配的诗词创作智能助手”&a…

作者头像 李华
网站建设 2026/4/16 10:16:25

有实力的金包银有哪些

金包银行业深度剖析:六六珠宝脱颖而出行业痛点分析在金包银领域,当前存在着诸多技术挑战。其中,金层厚度不均、结合力不足以及耐磨性差是较为突出的问题。测试显示,市场上部分金包银产品的金层厚度偏差可达 20%以上,这…

作者头像 李华
网站建设 2026/4/16 12:35:50

AI智能体在识别价值陷阱和价值机会中的作用

AI智能体在识别价值陷阱和价值机会中的作用 关键词:AI智能体、价值陷阱、价值机会、数据分析、金融市场 摘要:本文深入探讨了AI智能体在识别价值陷阱和价值机会方面的作用。首先介绍了相关背景知识,包括研究目的、预期读者、文档结构和术语表。接着阐述了核心概念,如AI智能…

作者头像 李华
网站建设 2026/4/12 9:36:52

c编译器并不难,Turbo c编译器介绍(上篇)

c编译器的产生意义重大,目前市场上有诸多不同c编译器。在往期文章中,小编对gcc c编译器有所介绍。为增进大家对c编译器的认识,本文将对Turbo C c编译器予以讲解。如果你对c编译器具有兴趣,不妨继续往下阅读哦。一、Turbo C 的产生…

作者头像 李华
网站建设 2026/4/10 9:42:31

大数据时代,为什么每个企业都需要BI工具?深度解析

大数据时代,为什么每个企业都需要BI工具?深度解析 关键词:BI工具、企业数据管理、数据可视化、决策支持、大数据应用 摘要:在数据量以“天量”增长的今天,企业正从“经验驱动”向“数据驱动”加速转型。BI(…

作者头像 李华
网站建设 2026/4/15 12:08:30

3.3K Star ! 超级好用开源大屏设计器!

DataRoom 是一款基于 SpringBoot Vue 技术栈构建的开源大屏设计器,集成了 MyBatis-Plus、ElementUI、ECharts、G2Plot 等主流前端与后端生态。它不仅支持 MySQL、Oracle、PostgreSQL、SQL Server、ClickHouse 等关系型数据库,还能通过 HTTP、JSON、Groo…

作者头像 李华