JZ6 从尾到头打印链表

 

 

# 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 here
        ##方法一:使用栈
#         if not listNode:
#             return []
#         tmp=[]  #入栈数据
#         result=[]  #出栈得到的最后结果
#         #入栈保存各节点内容
#         while(listNode): #listNode是一个链表的头节点
#             tmp.append(listNode.val)  ##入栈,list.append,list无stack
#             listNode=listNode.next
#         #出栈弹出各节点内容,即为对原链表反转后的结果,最先弹出的为链表的最后一个节点
#         while(tmp):
#             result.append(tmp.pop())  ##出栈,list.pop
#         return result
            
        ##方法二:从头到尾遍历链表,然后逆序输出
#             if not listNode:
#                 return []
#             result=[]
#             while listNode:
#                 result.append(listNode.val)
#                 listNode=listNode.next
#             #反转list的方法
#             #1:
#             #return result[::-1]  #其中[::-1]代表从后向前取值,每次步进值为1
#             #2:
#             return list(reversed(result))               
#             #reversed(result)返回的是迭代器,所以前面加个list转换为list 
        ##方法三:使用递归,一层层进,从最内向外出
        ##(当链表比较长的时候,会导致函数调用的层级很深,很可能导致函数调用栈的溢出,所以总体来说还是栈的基于循环实现的思路鲁棒性更好一些)
        if not listNode:
            return []
        result=[]
        def solutions(Node):
            if Node:
                if Node.next:
                    solutions(Node.next)
                result.append(Node.val)
#                 ##如果Node是最后一个节点,则Node.next为空,solutions(Node.next)跳出,将Node.val加入result中
#                 ##然后sulutions(Node.next)跳出,将Node.val加入result中,这里的Node.next是最后一个节点,Node是倒数第二个节点
        solutions(listNode)
        return result
            
            
            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值