力扣热题100之反转链表

题目

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

代码

方法一:

重点需要理解的是正确翻转的流程:在链表未被破坏之前保留cur的下一个节点信息->改变cur.next的指向->更新prev的位置->更新cur

bash 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:           
        cur=head   
        prev=None 
        while cur:
            Next=cur.next # 首先应该保存下一个节点
            cur.next=prev # 然后翻转
            prev=cur # 然后更新pre
            cur=Next # 然后将cur指向没有被改变的下一个节点
        return prev  # 返回翻转之后的链表的头节点    

方法二:递归

主要在于理解什么是递归,递归是怎么运行的,之前上课的时候老师说的一个比喻就是:递归就向打开一扇扇门,到最后一扇之后又从最后一扇门开始关门。也就是说这个代码中就是先反复调用reverseList函数到链表的最后一个元素(满足结束条件),执行head.next.next=head, head.next=None这两句代码,然后轮到倒数第二个元素进行上述操作......

假设原链表:1 -> 2 -> 3 -> 4 -> 5

递归过程:

  1. 递归至节点5,返回5。
  2. 节点4处理:5->4->None。
  3. 节点3处理:5->4->3->None。
  4. 节点2处理:5->4->3->2->None。
  5. 节点1处理:5->4->3->2->1->None。
    最终链表:5 ->4 ->3 ->2 ->1
bash 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:           
        if head==None or head.next==None:
            return head
        new_head=self.reverseList(head.next)
        head.next.next=head
        head.next=None
        return new_head
相关推荐
企业数字化笔记1 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!2 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君6584 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧5 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm5 小时前
40 二叉树的直径
c++·leetcode
Shimeri5 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J6 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang6 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖6 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy6 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化