牛客网《剑指offer》之Python2.7实现:从尾到头打印链表

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

思路

逆序链表,首先想到的必须是栈啊,利用栈的后进先出特性。同时,栈的变形:递归,同样是可以的。 其次,利用python列表的方法也可以简单实现

将python中的列表视为栈操作。

# -*- 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 []
        else:
            TempList = []
            LastList = []
            while listNode is not None:
                TempList.append(listNode.val)        #入栈
                listNode = listNode.next
            while len(TempList) is not 0:
                LastList += [TempList.pop()]         #出栈
            return LastList
递归

(参考了牛客网评论区的代码,简洁的不行)

# -*- 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 []
        else:
            return self.printListFromTailToHead(listNode.next) + [listNode.val]        
python黑科技

依次遍历,构建正序列表,再使用python列表的方法lst.reverse(),简单粗暴

# -*- 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 []
        else:
            ArrayList = []
            while listNode is not None:
                ArrayList.append(listNode.val)
                listNode = listNode.next
            ArrayList.reverse()            #reverse()方法改变了列表,但是不返回值
            return ArrayList

猜你喜欢

转载自blog.csdn.net/ck_101/article/details/82317016