leetcode 206. Reverse Linked List 解法 python

本文深入讲解链表反转的实现方法,包括递归和非递归两种方式,详细解析每种方法的实现细节及注意事项,适合初学者理解链表操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.问题描述

Reverse a singly linked list.

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?

二.解题思路

这道题拿来熟悉链表函数不错的,链表反转是基本的操作。

主要有递归和非递归两种方法。

主要是要注意递归的时候python的函数变量引用机制。

递归的时候你传一个变量过去,改变变量本身(地址)没有意义,因为上一步递归还是保存着改变前的变量(地址)

所以若想通过变量来保存最后的头结点,需要改用可变变量保存,如用list保存,来修改变量的值而非其本身。

非递归的话就很简单了,没啥要注意的,莽就是了。

之后有高效算法会更新。

更多leetcode算法题解法请关注我的专栏leetcode算法从零到结束或关注我。

欢迎大家一起套路一起刷题一起ac。

三.源码

1.递归

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        #52
        if not head:return
        def reverseTool(now,head):
            if not now.next:
                head[0]=now
                return now
            reverseTool(now.next,head).next=now
            # we can use head.next.next=head, and it must be used after reverseTool,need one more parameter
            return now    
        res=[1]
        reverseTool(head,res)
        head.next=None
        return res[0]

2.非递归

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre=None
        while head:
            temp=head.next
            head.next=pre
            pre=head
            head=temp
        return pre
            

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值