当前位置: 首页 > article >正文

python-leetcode 23.反转链表

题目:

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


方法一:迭代

在遍历链表时,将当前节点的next指针改为指向前一个节点。由于节点没有引用其前一个节点,因此要先存储前一个节点,在更改引用之前,还要存储后一个节点,最后返回新的头引用。

链表注意:上一个,现在,下一个的关系

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def reverseList(self, head):
        """
        :type head: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        prev=None  #用来追踪上一个节点的指针,初始为空
        curr=head   #当前处理的节点,初始化为链表的头节点
        while curr is not None:
            next_node=curr.next  #当前节点指向的下一个节点
            curr.next=prev  #反转当前节点的指向,让当前节点指向前一个节点
            prev=curr #将前一指针移动到当前节点curr,以便下一个节点反转时,当前节点成为下一个节点的前驱节点
            curr=next_node #指针后移,继续遍历
        return prev

时间复杂度:O(N)

空间复杂度:O(1)


方法二:递归

 假设链表为:n1​→…→nk−1​→nk​→nk+1​→…→nm​→∅

若从节点nk+1到nm已经被反转,而我们处于nk,n1​→…→nk−1​→nk​→nk+1​←…←nm​

希望nk.next.next=nk

需要注意的是 n1​ 的下一个节点必须指向 ∅。如果忽略了这一点,链表中可能会产生环。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def reverseList(self, head):
        """
        :type head: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        if head is None or head.next is None:  #链表为空或者链表只有一个节点,返回当前节点
            return head
        newhead=self.reverseList(head.next) #对链表的下一个节点递归调用,直到链表末尾
        head.next.next=head #反转指针,当前节点head设为下一个节点head.next 的下一个节点
        head.next=None  #将当前节点 head 的 next 指针设为 None,避免形成环
        return newhead

时间复杂度:O(N) 

空间复杂度:O(N)


http://www.kler.cn/a/541326.html

相关文章:

  • STM32自学记录(十)
  • Vue(4)
  • 使用Qt+opencv实现游戏辅助点击工具-以阴阳师为例
  • 小白零基础如何搭建CNN
  • 理邦仪器嵌入式(C/C++开发)开发面试题及参考答案
  • 信创领域的PostgreSQL管理员认证
  • repo使用介绍
  • Python:凯撒密码
  • CodeGeeX4+IDEA辅助开发工具
  • android的ViewModel这个类就是业务逻辑层吗
  • XML DOM
  • 深度学习01 神经网络
  • 项目实践之----贪吃蛇小游戏
  • 【Flink源码分析】6. Flink1.19源码分析-Flink底层的异步通信
  • 以讲故事手法在软文营销中运用2+1链动模式AI智能名片S2B2C商城小程序的策略研究
  • Android Knowledge
  • Redis 集群(Cluster)和基础的操作 部署实操篇
  • JAVA安全之Java Agent打内存马
  • MacOS 安装NVM
  • 场景设计:设计一个分布式限流器,采用令牌桶算法,漏桶算法、滑动窗口算法实现
  • 荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测
  • Spring Boot Actuator(官网文档解读)
  • QT:QWidget
  • 采用分步式无线控制架构实现水池液位自动化管理
  • LLM Note
  • 图论——并查集