赋料扬雄敌,诗看子建亲。这篇文章主要讲述剑指Offer之面试题6:从尾到头打印链表相关的知识,希望能为你提供帮助。
面试题6: 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 < = 链表长度 < = 10000
思路考察链表的基本操作,需要对做题者对链表的基本操作熟悉。
- 递归方法
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
if not head:
return []
return self.reversePrint(head.next) + [head.val]
此种方法时间复杂度:$O(n)$,空间复杂度: $O(n)$
- 借助栈
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
if not ListNode:
return n
stack = []# 模拟栈
while head:
stack.append(head.val)
head = head.next
return stack[::-1]
时间复杂度 $O(n)$:n 是链表的长度,遍历整个链表
空间复杂度 $O(n)$:额外存储结点数组空间
- 反转后打印
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
cur, pre = head, None
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
res = []
while pre:
res.append(pre.val)
pre = pre.next
return res
时间复杂度 $O(n)$:n 是链表的长度,遍历这个链表
空间复杂度 $O(n)$:额外存储结点数组空间
总结【剑指Offer之面试题6(从尾到头打印链表)】链表的题目还是很好理解的,也是整个算法中的基础。理解好链表的各种操作才好去理解其他的数据结构与算法思想,如果对链表实现感兴趣,推荐看之前写过的一篇 python 实现链表的文章,点??此处??。
推荐阅读
- Go语言内存对齐详解
- #yyds干货盘点#令人迷惑的equals 和 ==
- 全网Oracle基础最全教程
- 四面阿里被问MySQL底层如何实现order by的,瞬间懵了!
- 使用Node.jsMongoDBFastify 构建API服务
- 你真搞懂时间复杂度和空间复杂度了吗
- 图文 Win8触摸键盘怎样设置静音
- 图文 Win8系统为程序窗口设置单独输入法
- 图文 在Win8桌面创建快捷方式打开Metro应用