<LeetCode天梯>Day026 反转链表(递归法+(迭代法)双链表法) | 初级算法 | Python

简介: <LeetCode天梯>Day026 反转链表(递归法+(迭代法)双链表法) | 初级算法 | Python

以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

链表


image.png

image.png

题干

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例1:

image.png

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

输出:[5,4,3,2,1]


示例2:

image.png


输入:head = [1,2]

输出:[2,1]


示例3:


输入:head = []

输出:[]


提示:


链表中节点的数目范围是 [0, 5000]

-5000 <= Node.val <= 5000

递归法

分析:


首先看到这题干,是不是很熟悉,不就是反转排序嘛,说搞就搞!!!可以想到的有递归法、迭代法进行反转操作,我们先来实现递归,然后再实现迭代。


关于递归这里提一两点:


递归基本有这几步递归的模板,1.终止条件,2.递归调用,3.逻辑处理。

这里引用下大佬的基本思路:

image.png

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        # # 递归终止条件:链表为空,或者是链表没有尾结点的时候,直接返回
        if head == None or head.next == None:
            return head
        next = self.reverseList(head.next)    # 保存当前节点的下一个节点
        head.next.next = head
        # next.next = head
        head.next = None
        return next

image.png

(迭代法)双链表法

双链表求解是把原链表的结点一个个摘掉,每次摘掉的链表都让他成为新的链表的头结点,然后更新新链表。

再次借用下大佬的图片

image.png

直接上代码了吧就!

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
         # 双链表法
        new_link = None
        while head:    # 判断是否为空字符,如果非空则运行下面的
            # 保存当前节点的下一个节点
            next = head.next
            # 将当前节点指向前一个节点
            head.next = new_link
            # 上一个节点指向当前节点,再次循环中会被当成上一个值
            new_link = head
            # 头节点指向下一个节点
            head = next
        return new_link

image.png


相关文章
|
11月前
|
存储 监控 算法
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
222 5
|
10月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
211 0
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
246 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
466 0
【链表】算法题(二) ----- 力扣/牛客
【链表】算法题(二) ----- 力扣/牛客
|
算法 Java
数据结构与算法学习五:双链表的增、删、改、查
双链表的增、删、改、查操作及其Java实现,并通过实例演示了双向链表的优势和应用。
232 0
数据结构与算法学习五:双链表的增、删、改、查
【链表】算法题(一) ----- 力扣 / 牛客
【链表】算法题(一) ----- 力扣 / 牛客
LeetCode------递归(爬楼梯)
这篇文章通过LeetCode上的"爬楼梯"问题介绍了递归的基本概念和实现方法,包括递归公式的推导、基本递归实现、使用备忘录优化以避免重复计算,以及自底向上的迭代方法来提高效率。
LeetCode------递归(爬楼梯)
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
284 2
|
算法 Python
力扣初级算法(Python)(二)
力扣初级算法(Python)(二)
132 2

推荐镜像

更多