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:
pre, cur = None, head
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
- 时间复杂度:O(n)
- 空间复杂度:O(1)
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:
def recur(cur, pre):
if not cur:
return pre
res = recur(cur.next, cur)
cur.next = pre
return res
return recur(head,None)
- 时间复杂度: O(n) 需要对链表的每个节点进行反转操作;
- 空间复杂度: O(n) 递归调用的栈空间最多为 n 层。
本文介绍了两种链表翻转的方法,包括使用双指针迭代和递归。双指针迭代法通过两个指针pre和cur不断交换节点的next指针,实现链表反转,时间复杂度为O(n),空间复杂度为O(1)。递归法则是通过递归调用将节点逐个反转,同样达到O(n)的时间复杂度,但会占用O(n)的栈空间。这两种方法都是解决链表反转问题的有效策略。
679

被折叠的 条评论
为什么被折叠?



