【剑指offer】5-从尾到头打印链表

题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

可以使用栈结构,从头到尾遍历链表放入栈中,根据栈先入后出的性质,可以实现将链表从尾到头返回。在python中可以用列表结构来实现栈的功能。

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

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

除了逆序表示,我们还可以利用pop()实现先进后出


def printListFromTailToHead(self, listNode):
        # write code here
        arrayList=[]
        while listNode:
            arrayList.append(listNode.val)
            listNode=listNode.next
        array2=[]
        while arrayList:
            array2.append(arrayList.pop())
        return array2

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        if not listNode:
            return []
        temp = []
        result = []
        while listNode:
            temp.append(listNode.val) # 进栈
            listNode = listNode.next
        while temp:
            result.append(temp.pop()) # 出栈
        return result

递归

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        result = []
        def solution(node):
            if node:
                solution(node.next)
                result.append(node.val)
                
        solution(listNode)
        return result

总结: 链表的特点

在这里插入图片描述
长度不固定,可以任意增删,插入或删除节点时,只需改变相应节点的指针指向即可,无需大量移动元素。

存储空间不连续,数据元素之间使用指针相连,每个数据元素只能访问周围的一个元素(根据单链表还是双链表有所不同),所以易于扩展。

存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针)。

要访问特定元素,链表必须从链表头开始,依次向后查找,平均需要0(n)的时间,存取速度慢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值