从尾到头打印链表

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
[1] 利用栈的后进先出
python中没有stack这个结构,但是可以使用list作为stack使用: listA.append() 和 listA.pop()

class Solution:  # (⊙﹏⊙)这个超出限制内存
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        l = []
        answer = []
        while(listNode):
            l.append(listNode.val)
            listNode = listNode.next
        while(l):
            answer.append(l.pop)
        return answer

**[2]**递归求解

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution: 
# 返回从尾部到头部的列表值序列,例如[1,2,3] 
    def printListFromTailToHead(self, listNode): 
    # write code here 
        if listNode is None: 
            return [] 
        return self.printListFromTailToHead(listNode.next) + [listNode.val]

[3] 利用python list的insert(index, obj) 或 append后再反转

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        l = []
        head = listNode
        while(head):
            l.insert(0, head.val)  # 不停的往0号位置插入,已存在的值往后移
            head = head.next
        return l

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        l = []
        head = listNode
        while(head):
            l.append(head.val)
            head = head.next
        return l[::-1]

**[4]**使用python内置函数

from collections import deque
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        temp = deque()
        head = listNode
        while(head):
            temp.appendleft(head.val)
            head = head.next
        return temp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值