摘要:从头到尾遍历链表,每次都将节点的值压入栈中;遍历完成后,依次从栈中弹出元素并保存返回。# -*- 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]来源:天哥教育