剑指offer第三题 从尾到头打印链表

题目描述

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

思路

1. 从头开始,每经过一个节点就把它的值保存下来,最后反转

# -*- 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
        res = []
        while listNode:
            res.append(listNode.val)
            listNode = listNode.next
        return res[::-1]

2. 遍历链表,把链表值插入到0位置

# -*- 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
        res = []
        while listNode:
            res.insert(0, listNode.val)
            listNode = listNode.next
        return res

总结

第一种的方法复杂度更低,因为append的方法复杂的是O(1),翻转是O(n)。第二种方法的insert复杂度是O(n),一共有n个元素的化,第一种的复杂度是O(n),第二种是O(n*n).

猜你喜欢

转载自blog.csdn.net/qq_38650545/article/details/83999440