leetcode206. Reverse Linked List

Given the head of a singly linked list, reverse the list, and return the reversed list.

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
方法一:迭代(双指针)

考虑遍历链表,并在访问各节点时修改 next 引用指向

python 复制代码
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        cur, pre = head, None
        while cur:
            tmp = cur.next # 暂存后继节点 cur.next
            cur.next = pre # 修改 next 引用指向
            pre = cur      # pre 暂存 cur
            cur = tmp      # cur 访问下一节点
        return pre
python 复制代码
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        cur, pre = head, None
        while cur:
            cur.next, pre, cur = pre, cur, cur.next
        return pre

方法二:递归

考虑使用递归法遍历链表,当越过尾节点后终止递归,在回溯时修改各节点的 next 引用指向。

recur(cur, pre) 递归函数:

复制代码
终止条件:当 cur 为空,则返回尾节点 pre (即反转链表的头节点);
递归后继节点,记录返回值(即反转链表的头节点)为 res ;
修改当前节点 cur 引用指向前驱节点 pre ;
返回反转链表的头节点 res ;

reverseList(head) 函数:

调用并返回 recur(head, null) 。传入 null 是因为反转链表后, head 节点指向 null ;

python 复制代码
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        def recur(cur, pre):
            if not cur: return pre     # 终止条件
            res = recur(cur.next, cur) # 递归后继节点
            cur.next = pre             # 修改节点引用指向
            return res                 # 返回反转链表的头节点
        
        return recur(head, None)       # 调用递归并返回
相关推荐
不良人龍木木12 分钟前
云图-地基云图
图像处理·算法·计算机视觉·1024程序员节
RTC老炮13 分钟前
webrtc弱网-PccNetworkController类源码分析与算法原理
网络·算法·webrtc
Swift社区20 分钟前
LeetCode 406 - 根据身高重建队列
算法·leetcode·1024程序员节
敲上瘾22 分钟前
背包dp——动态规划
c++·算法·动态规划
京东零售技术42 分钟前
大模型时代的广告营销变革与实践
算法
侯小啾6 小时前
【03】C语言 强制类型转换 与 进制转换
c语言·数据结构·算法
Xの哲學6 小时前
Linux NAPI 架构详解
linux·网络·算法·架构·边缘计算
京东零售技术10 小时前
扛起技术大梁的零售校招生们 | 1024技术人特别篇
算法
爱coding的橙子10 小时前
每日算法刷题Day78:10.23:leetcode 一般树7道题,用时1h30min
算法·leetcode·深度优先
Swift社区10 小时前
LeetCode 403 - 青蛙过河
算法·leetcode·职场和发展