本文共 1143 字,大约阅读时间需要 3 分钟。
反转链表并提取节点值是一个常见的链表操作问题。以下是一个基于代码示例的详细解释和优化版本:
给定一个单链表的头节点,要求从尾部到头部反转链表,并返回每个节点的值作为一个数组。
输入:head = [1,3,2]输出:[2,3,1]
代码采用了递归的方法来实现链表的反转。具体步骤如下:
定义基础情况:如果链表为空(即头节点为 None),则返回一个空数组。
递归调用:调用自身方法,从链表的下一个节点开始递归处理。
逐步构建结果数组:每次递归返回后,将当前节点的值添加到结果数组的末尾。
class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def reversePrint(self, head: ListNode) -> List[int]: res = self.getValue(head) return res def getValue(self, head: ListNode) -> List[int]: if head is None: return [] else: res = self.getValue(head.next) # 递归处理下一个节点 res.append(head.val) # 将当前节点的值添加到结果数组最后 return res
假设初始链表为:1 -> 3 -> 2 -> None
最终输出结果为 [2,3,1],与题目要求一致。
该算法的时间复杂度为 O(n),因为我们只需要遍历链表一次。在最坏情况下(链表长度为 10000),该算法仍能高效运行。
这种递归方法虽然简洁,但在极端情况下可能会导致栈溢出。可以通过迭代的方式来优化代码,但递归实现更直观且易于理解。
转载地址:http://fggcz.baihongyu.com/