链表 -- 反转链表,k个一组翻转链表,两两交换链表中结点

news2025/1/17 10:15:44

目录

反转链表

题目

​编辑

分析

代码

k个一组翻转链表

题目

分析

代码

两两交换链表中的结点

题目

​编辑

分析

代码


反转链表

题目

分析

反转过程:

  • newhead作为遍历指针,最终停在尾结点上
  • prev保存上一个结点,通过改变newhead和prev的连接来实现反转(核心)
  • 通过next保存原链表的下一个结点,防止反转连接关系后找不到原结点

经过一轮循环后,第一个和第二个结点的连接成功反转,之后就不断循环该过程,直到next指向空

代码

/**
 * 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* reverseList(ListNode* head) {
        ListNode *pre = nullptr, *next = head;
        while (next) {
            next = head->next;
            head->next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
};

实在记不住原理,可以记代码:

  • 首先定义前后继指针
  • 循环条件:后继结点指向空
  • 循环体:后继指针指向下一个结点,prev指引head->next的指向关系,prev跟着head走,head跟着next走

注意等号两边是对称的嗷: 

k个一组翻转链表

题目

分析

还是基于反转链表的思路,难点在于先筛选出k个结点作为一组再进行反转 + 如何将若干组进行链接

  • 可以考虑进行递归,将大问题拆分成若干小问题 -- 也就是代码内只进行一组的反转,反转后将新的头尾结点传递给其他部分
  • 详细来说,头结点需要传递给前面部分(作为返回值返回),尾结点需要主动让后面部分来链入(接收函数的返回值)

代码

/**
 * 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* reverseKGroup(ListNode* head, int k) {
        ListNode* tmp = head;
        //查看当前是否还有k个剩余结点
        for (int i = 0; i < k; ++i) {
            if (tmp == nullptr) {
                return head;
            }
            tmp = tmp->next;
        }
        //对当前这四个结点进行反转
        ListNode *pre = nullptr, *next = head, *cur = head;
        while (cur != tmp) {
            next = cur->next;
            cur->next = pre;
            pre = cur;
            cur = next;
        }
        //反转后,head成为新的尾结点,来链入后续部分
        head->next = reverseKGroup(tmp, k);
        //返回给前面部分新的头结点
        return pre;
    }
};

两两交换链表中的结点

题目

分析

类似于上道题的思路,只是更简单了一点 -- 因为不需要进行组内反转了

  • 相当于直接给出了新的头尾结点
  • 依然可以将两个结点看为一组,只需要重新对二者进行链接,然后将头结点返回,尾结点接收返回值就行

代码

/**
 * 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) {
            return nullptr;
        }
        if (head->next == nullptr) {
            return head;
        }
        ListNode *new_head = head->next, *next = new_head->next;
        head->next = swapPairs(next);
        new_head->next = head;
        return new_head;
    }
};

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

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

相关文章

mac配置 iTerm2 使用lrzsz与服务器传输文件

mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…

统计学习算法——决策树

内容来自B站Up主&#xff1a;风中摇曳的小萝卜https://www.bilibili.com/video/BV1ar4y137GD&#xff0c;仅为个人学习所用。 问题引入 有15位客户向某银行申请贷款&#xff0c;下面是他们的一些基本信息&#xff0c;类别列表示是否通过贷款申请&#xff0c;是表示通过贷款申…

疫苗预约小程序ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

物联网网关Web服务器--lighttpd服务器部署与应用测试

以下是在国产ARM处理器E2000飞腾派开发板上部署 lighttpd 并进行 CGI 应用开发的步骤&#xff1a; 1、lighttpd简介 Lighttpd 是一款轻量级的开源 Web 服务器软件&#xff0c;具有以下特点和功能&#xff1a; 特点 轻量级&#xff1a;Lighttpd 在设计上注重轻量级和高效性&a…

Linux的常用命令(三)

目录 六、网络通信命令 1.网络通信命令ping 2.网络通信命令ifconfig 七、系统命令 1. 系统命令shutdown 2. 系统命令reboot 八、vi编辑器 六、网络通信命令 1.网络通信命令ping 命令名称&#xff1a;ping 命令所在路径&#xff1a;/usr/sbin/ping 执行权限&#xff…

CryptoMamba:利用状态空间模型实现精确的比特币价格预测

“CryptoMamba: Leveraging State Space Models for Accurate Bitcoin Price Prediction” 论文地址&#xff1a;https://arxiv.org/pdf/2501.01010 Github地址&#xff1a;https://github.com/MShahabSepehri/CryptoMamba 摘要 预测比特币价格由于市场的高波动性和复杂的非线…

【图表示例】元素-边-01

G6A Graph Visualization Framework in JavaScripthttps://g6.antv.antgroup.com/zh/examples/element/edge/#line 项目的创建参考 G6 详细教程&#xff0c;注意&#xff0c;node版本需要&#xff1a;required: { node: >18 }G6A Graph Visualization Framework in JavaScri…

永磁同步电机参数辨识算法--变增益MRAS方法在线辨识转动惯量

一、原理介绍 现有的转动惯量辨识方案可归纳为两类:离线转动惯量辨识方案和在线转动惯量辨识方案。离线转动惯量辨识方案是在系统控制程序运行前通过直接测试法、加减速法和人工轨迹法等对惯量进行辨识&#xff0c;将测得的参数提供给控制程序使用。离线式辨识方法需要对大量的…

《研发管理 APQP 软件系统》——汽车电子行业的应用收益分析

全星研发管理 APQP 软件系统在汽车电子行业的应用收益分析 在汽车电子行业&#xff0c;技术革新迅猛&#xff0c;市场竞争激烈。《全星研发管理 APQP 软件系统》的应用&#xff0c;为企业带来了革命性的变化&#xff0c;诸多收益使其成为行业发展的关键驱动力。 《全星研发管理…

1月13日学习

[HITCON 2017]SSRFme 直接给了源代码&#xff0c;题目名称还是ssrf&#xff0c;那么该题大概率就是SSRF的漏洞&#xff0c;进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头&#xff0c;如果存在&#xff0c;则将其拆分为数组&#xff0c;并将第一个 IP 地址…

No.32 笔记 | 业务逻辑漏洞全解析:概念、成因与挖掘思路

业务逻辑漏洞全解析&#xff1a;概念、成因与挖掘思路 核心速览 本文将围绕 业务逻辑漏洞 展开详细探讨&#xff0c;包括 成因、常见类型、重要性 及 具体挖掘方法。业务逻辑漏洞是一种与系统核心功能逻辑深度绑定的漏洞&#xff0c;需结合 代码审计 和 手动测试 进行发现和分…

EF Core实体跟踪

快照更改跟踪 实体类没有实现属性值改变的通知机制&#xff0c;EF Core是如何检测到变化的呢&#xff1f; 快照更改跟踪&#xff1a;首次跟踪一个实体的时候&#xff0c;EF Core 会创建这个实体的快照。执行SaveChanges()等方法时&#xff0c;EF Core将会把存储的快照中的值与…

2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一

2023-2024 学年 广东省职业院校技能大赛(高职组“信息安全管理与评估”赛题一&#xff09; 模块一:网络平台搭建与设备安全防护第一阶段任务书任务 1&#xff1a;网络平台搭建任务 2&#xff1a;网络安全设备配置与防护DCRS:DCFW:DCWS:DCBC:WAF: 模块二&#xff1a;网络安全事件…

得物App利用技术赋能,打造潮流消费“新玩法”

如今&#xff0c;技术的力量正在以前所未有的方式重塑着我们的消费体验。从线上购物到虚拟现实&#xff0c;技术的角色越来越重要&#xff0c;它不仅是推动商业发展的引擎&#xff0c;更是满足年轻消费者多元化、个性化需求的关键。得物App作为一个年轻人喜爱的潮流消费平台&am…

语义检索效果差?深度学习rerank VS 统计rerank选哪个

前段时间我开发了一个用白话文搜索语义相近的古诗词的应用&#xff08;详见&#xff1a;《朋友圈装腔指南&#xff1a;如何用向量数据库把大白话变成古诗词》&#xff09;&#xff0c;但是有时候搜索结果却不让人满意&#xff0c;排名靠前的结果和查询的语义没啥关系&#xff0…

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

本文包含&#xff1a; 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览&#xff1a;需求分析、模型设计与数据加载 目录 第一部分&#xff1a;需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…

【机器学习】制造业转型:机器学习如何推动工业 4.0 的深度发展

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 引言 在当今科技飞速发展的时代&#xff0c;制造业正经历着前所未有的变革&#xff0c;工业4.0的浪潮席卷而来。工业4.0旨在通过将…

MPLS原理及配置

赶时间可以只看实验部分 由来&#xff1a;90年代中期&#xff0c;互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发&#xff0c;但由于硬件技术存在限制导致转发性能低&#xff0c;查表转发成为了网络数据转发的瓶颈。 因此&#xff0c;旨在提高路由器转发速度的MPL…

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意&#xff1a;小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务&#xff0c;如果没有就在插件管理中添加插件 2.腾讯位置服务…

【spring mvc】文件上传、下载

文件上传&#xff0c;存储至本地目录中 一、代码1、工具类&#xff08;敏感后缀过滤&#xff09;2、文件上传&#xff0c;存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类&#xff08;敏感后缀过滤&#x…