Problem: 206. 反转链表
迭代
两个指针 pre代表要指向的节点 cur代表当前的节点
初始化pre=None,cur为head节点
遍历链表的节点反复执行
cur节点指向pre
pre指向cur
cur移动到下一个节点
时间复杂度: O ( n ) O(n) O(n) 遍历一次链表
空间复杂度: O ( 1 ) O(1) O(1) 若干中间变量
# 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]:
pre = None
cur = head
while cur:
next = cur.next # 下一个节点
cur.next = pre
pre = cur
cur = next
return pre
递归
https://leetcode.cn/problems/reverse-linked-list/solutions/2361282/206-fan-zhuan-lian-biao-shuang-zhi-zhen-r1jel/

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) O(n) 遍历一次链表
空间复杂度: O ( n ) O(n) O(n) 最多n层递归函数调用栈
230

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



