剑指Offer之 从尾到头打印链表

B站影视 韩国电影 2025-10-14 06:20 1

摘要:从头到尾遍历链表,每次都将节点的值压入栈中;遍历完成后,依次从栈中弹出元素并保存返回。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.nex

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。

如输入{1,2,3}的链表如下图:

返回一个数组为[3,2,1]

0

示例1

输入:{1,2,3}返回值:[3,2,1]

示例2

输入:1,[[2]]返回值:[58,24,0,67]

因为栈具有先进后出的特性,因此可以利用栈来解决。

步骤

从头到尾遍历链表,每次都将节点的值压入栈中;遍历完成后,依次从栈中弹出元素并保存返回。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = None## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可## # @param listNode ListNode类 # @return int整型一维数组#class Solution:def printListFromTailToHead(self , listNode: ListNode) -> List[int]:# write code herestack_list, res = , while listNode:stack_list.append(listNode.val)listNode = listNode.nextwhile stack_list:res.append(stack_list.pop)return res

其实递归的核心思想还是利用栈的后进先出

在这里,我们的解题方法是:

假设一个递归函数,传入当前的链表节点;如果当前节点不为空,那么就先去递归调用下一个节点,一直深入到链表末端;当递归返回后,再打印当前节点的数值。

这样,最后进入递归的节点,就会最先被打印。

基准情况

当listNode为None,表示已经到了链表末尾,应该终止递归,开始返回。

递归情况

先递归调用 printListFromTailToHead(listNode), 处理从下一个节点开始的子链表。当递归调用返回之后再打印当前节点。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = None## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可## # @param listNode ListNode类 # @return int整型一维数组#class Solution:def printListFromTailToHead(self , listNode: ListNode) -> List[int]:# write code hereif listNode is None:return tmp_res = self.printListFromTailToHead(listNode.next)return tmp_res + [listNode.val]

来源:天哥教育

相关推荐