[2025-10-09] Leetcode 206. 反转链表(时间总是 100%,出问题了吗😂)

题目

206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
 
示例 1:

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

输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
 
提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000
     
    进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

我的代码(Python)

循环

# 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 not head or not head.next:
            return head
        tmp0 = None
        tmp1 = head
        tmp2 = head.next
        while tmp1:
            tmp1.next = tmp0
            tmp0 = tmp1
            tmp1 = tmp2
            tmp2 = tmp2.next if tmp2 else None
        return tmp0  

递归

# 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]:
        return self.reverseInner(head, None)

    def reverseInner(self, head: Optional[ListNode], newTail: Optional[ListNode]) -> Optional[ListNode]:
        if not head:
            return head
        newHead = head.next
        head.next = newTail
        if not newHead:
            return head
        return self.reverseInner(newHead, head)

点评

基本操作,题目也属于简单类别的。
循环方法中,初一看我比官方的方法多使用了一个中间变量,不过官方其实是在每次循环中创建了一个临时变量,如果不是有编译器优化,这咱方式频繁创建和销毁其实更消耗资源,不如我这种直接放一个长期变量比较好。
递归方法官方更简洁,理解的难度也更高,我没想这么深入。


baddif@gmail.com

AI简历优化站

Nonpareil.me:优化简历,助力职场
开源代码

AI求职跟踪器(建设中)

开源代码

主站(建设中)

Nonpareil Me

相关平台

Github Issues / Notion / Blog

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部