反转链表 II(LeetCode)

news2024/10/1 15:12:31

题目

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <=right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

解题

class ListNode:
    def __init__(self, value=0, next=None):
        self.value = value
        self.next = next


def reverseBetween(head: ListNode, left: int, right: int) -> ListNode:
    if left == 1:
        # 从头开始反转前 right 个节点
        return reverseN(head, right)
    # head 的 next 不变,但 next 部分从 left - 1 开始反转到 right - 1
    head.next = reverseBetween(head.next, left - 1, right - 1)
    return head


# 辅助变量,记录第 n+1 个节点,以便在反转完成后重新连接链表。
successor = None


def reverseN(head: ListNode, n: int) -> ListNode:
    """反转以 head 为起点的 n 个节点,返回新的头结点"""
    if n == 1:
        # 记录第 n+1 个节点
        global successor
        successor = head.next
        return head
    # 递归反转前 n-1 个节点
    last = reverseN(head.next, n - 1)
    head.next.next = head
    # 让反转之后的 head 节点和后面的节点连起来
    head.next = successor
    return last


# 创建链表的辅助函数
def create_linked_list(elements):
    if not elements:
        return None
    return ListNode(elements[0], create_linked_list(elements[1:]))


# 辅助函数:打印链表
def print_linked_list(head: ListNode):
    current = head
    while current:
        print(current.value, end=" -> " if current.next else "\n")
        current = current.next


if __name__ == '__main__':
    # 使用 create_linked_list 函数创建链表
    elements = [1, 2, 3, 4, 5]
    head = create_linked_list(elements)

    print("原始的链表:")
    print_linked_list(head)

    # 反转从位置 2 到位置 4 的链表部分
    left, right = 2, 4
    new_head = reverseBetween(head, left, right)

    # 打印反转后的链表
    print("反转一部分后的链表:")
    print_linked_list(new_head)

原始的链表:
1 -> 2 -> 3 -> 4 -> 5
反转一部分后的链表:
1 -> 4 -> 3 -> 2 -> 5

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

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

相关文章

即使是 Linux 用户也应该看看这篇文章。

关注公众号网络研究观获取更多内容。 安全启动至少从 Windows 8 开始就成为一项标准功能。 顾名思义&#xff0c;该功能可保护启动过程。 通过对启动过程中使用的任何软件&#xff08;“固件”&#xff09;进行数字签名&#xff0c;可确保启动过程的完整性。 与任何数字签名…

量产部落SM2258XT开卡软件,SM2258XT主控128G SSD固态卡死修复

故障现象&#xff1a;连接此固态硬盘后电脑就会卡死&#xff0c;拔掉重新连接概率性显示盘符&#xff0c;显示了之后也不能正常操作&#xff0c;一点击打开&#xff0c;电脑就立马卡死。 解决过程&#xff1a;下载了很多款量产工具&#xff0c;都不能开卡成功&#xff0c;点击…

【传知代码】受限前缀注意机制的事件关系识别(论文复现)

在自然语言处理的前沿&#xff0c;受限前缀注意机制正逐渐成为事件关系识别领域的关键技术。随着文本数据的不断增长和复杂性的提升&#xff0c;识别文本中事件之间的关系变得愈发重要和具有挑战性。受限前缀注意机制作为一种新兴的技术手段&#xff0c;通过有效地捕获文本中的…

不同太阳光波长定制设备太阳光模拟器

日光中不同波长的作用 太阳光不仅是地球上生命活动的能量来源&#xff0c;也对人类的生活产生了深刻的影响。了解太阳光的特性和对地球生态系统的贡献&#xff0c;对于我们保护环境、合理利用太阳能资源具有重要意义。科迎法电气作为太阳光模拟器的制造商可以根据不同的需求定制…

【Verilog-CBB】开发与验证(4)——RS前向打拍器

引言 我们知道时序路径的建立时间收敛依赖于触发器之间的组合逻辑延迟&#xff0c;以及时钟周期。对于一个确定的设计一般来说&#xff0c;时钟频率不会有太多的让步&#xff0c;因此修时序的时候主要发力点就是减小触发器之间组合逻辑延迟。一方面可以通过组合逻辑优化来降低…

Studying-代码随想录训练营day56| 108.冗余连接、109.冗余连接II

第56天&#xff0c;图论06&#xff0c;并查集题目类型冗余连接(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 108.冗余连接 109.冗余连接II 总结 108.冗余连接 文档讲解&#xff1a;手撕冗余连接 题目&#xff1a;108. 冗余连接 (kamacoder.com) 学习&…

SpringSecurity-3(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)

SpringSecurity使用数据库数据完成认证 5 SpringSecurity使用数据库数据完成认证5.1 认证流程分析5.1.1 UsernamePasswordAuthenticationFilter5.1.2 AuthenticationManager5.1.3 AbstractUserDetailsAuthenticationProvider5.1.4 AbstractUserDetailsAuthenticationProvider中…

跟《经济学人》学英文:2024年08月03日这期 How to make tourism work for locals and visitors alike

How to make tourism work for locals and visitors alike Holidays don’t have to be hell 原文&#xff1a; The dollar is hovering near a two-decade high. That has unleashed a multitude of American tourists keen to exercise their newfound spending power, m…

图的应用---最短路径

目录 一. 前言 二. Dijkstra算法 三. Floyd算法 一. 前言 所谓最短路径&#xff1a;就是在有向网当中&#xff0c;A点&#xff08;源点&#xff09;到达B点&#xff08;终点&#xff09;的多条路径中&#xff0c;寻找一条各边权值之和最小的路径&#xff0c;即最短路径。 如果…

Linux--TCP协议

传输层协议TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;会对数据的传输进行一个详细的控制。 TCP协议段格式 TCP协议段格式是TCP协议在网络传输数据时所使用的结构单…

Google paly开发者账号因恶意软件被封,也能申诉成功?怎么做?

想必在Google Play上摸爬滚打多年的各位开发者&#xff0c;在面对谷歌那似乎越来越严格的审核机制&#xff0c;都遭遇过应用被下架、账号被封的困境。 尤其是当你的应用被莫名其妙地判定为恶意软件&#xff0c;然后账号被封&#xff0c;更是让人头疼不已。 但别急&#xff0c;虽…

flutter开发环境搭建与android studio 安装配置

flutter开发环境搭建与android studio 安装配置 安装 android studio 下载安装 Android Studio 开发工具 Android Studio官网安装的时看到配置路径就换成自己其他盘的路径即可&#xff0c;其他的一路下一步就ok安装完毕&#xff0c;运行打开缺少 android sdk 按照提示下载即可…

python nicegui实现TodoList应用案例

参考&#xff1a; https://nicegui.io/ https://nicegui.io/#demos 版本 nicegui 1.4.30代码&#xff1a; python todolist.py from nicegui import ui from typing import List import jsonclass Todo:def __init__(self, text: str, completed: b…

连载|浅谈红队中的权限维持(六)-Linux 主机后门与Linux 隐藏文件

本文来源无问社区&#xff0c;更多实战内容&#xff0c;渗透思路可前往查看http://www.wwlib.cn/index.php/artread/artid/11584.html 0x01 Linux 主机后门 1、添加用户 一句话添加用户 useradd test;echo -e "123456n123456n" |passwd test 或者使用 openssl …

测试——Selenium

内容大纲: 什么是自动化测试 什么是Selenium Selenium工作原理 Selenium环境搭建 Selenium API 目录 1. 什么是自动化测试 2. 什么是Selenium 3. Selenium工作原理 4. Selenium环境搭建(java) 5. Selenium API 5.1 定位元素 5.1.1 CSS选择器定位元素 5.1.2 XPath定位元…

arr的谜思

arr到底是个啥&#xff1f; 在C语言中&#xff0c;arr 本身不是一个指针&#xff0c;而是一个数组名。然而&#xff0c;在大多数表达式中&#xff0c;数组名会被转换为指向数组首元素的指针。这种转换是自动的&#xff0c;并且是C语言的一个基本特性。 具体来说&#xff0c;当…

LDR6020快充线,科技与便捷的新宠

在快节奏的现代生活中&#xff0c;充电效率成为了我们不可忽视的一个重要因素。随着智能手机、平板电脑等电子设备的普及&#xff0c;快充线以其独特的优势逐渐成为充电设备市场的新宠。 快充线&#xff0c;相比于传统的普通充电线&#xff0c;快充线在充电速度上有着显著的提升…

Linux用户-sudo命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…

明日周刊-第19期

演唱会现场的感受确实跟耳机里的感觉非常不一样&#xff0c;听见音响和人声真真切切出现在你身边&#xff0c;那种震撼可以让你暂时忘却生活的烦恼。感谢8月3日的蔡健雅演唱会&#xff0c;凑巧的是这一场是今年巡演的最后一场。 文章目录 资源分享言论歌曲推荐 资源分享 nginx…

DC-8靶机通关

今天我们来学习DC-8这个靶机&#xff01;&#xff01;&#xff01; 1.实验环境 攻击机&#xff1a;kali2023.2 靶机&#xff1a;DC-8 2.1主机扫描 2.2端口扫描 还是熟悉的配方&#xff01;&#xff01;&#xff01; 3.1查看网页 其实可以先尝试一下爆破&#xff0c;但是爆…