题目
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简历优化站
AI求职跟踪器(建设中)
主站(建设中)
相关平台
Github Issues / Notion / Blog