数据结构与算法-链表(二):剑指offer(3)-从尾到头打印链表

剑指offer(3):从尾打印链表

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

一、链表的结构

在正式做题之前。我们先来看一下在python中链表是如何实现的:

# 这个就是链表的结构,首先这个是固定的,在工作的时候人家就给你了下面这样一个结构,你不能随意改动
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

然后对他进行初始化,初始化后一个节点连接着另一个节点:

if __name__ == "__main__":
    
    l1 = ListNode(1)
    l2 = ListNode(2)
    l3 = ListNode(3)

    # 把他们连起来:l1-->l2-->l3-->none
    l1.next = l2
    l2.next = l3
    l3.next = None 


这样就连接了一个链表,你如果想正着顺序打印出来,那么可以定义一个打印函数:

def printNode(node):  # node 是初始化后的值
	# 如果有值得话就进行打印
	print(node.val)
	node = node.next  # 连起来
printNode(l1)

在这里插入图片描述

二、从尾到头打印一个链表

首先需要明确的是,你是在已经给定链表环境的基础之上做这道题的:

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

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

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        ret = []
        while listNode:
            ret.append(listNode.val)  # 取得链表的值
            listNode = listNode.next  # 指向另一个节点

        return ret[::-1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值