剑指Offer刷题笔记——从头到尾打印列表

本文介绍了一种将链表从尾到头逆序输出的方法,包括迭代和递归两种实现方式。迭代方法通过循环将链表节点的值插入到列表头部,而递归方法则在每次递归调用中先处理子问题再处理当前节点,最终实现逆序输出。

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

ListNdoe 这个类存储的是链表中的一个节点,它的val属性保存的是本节点的值,next属性保存的它连接的下一个节点(下一个节点同样是一个同样格式的类)。

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

思路:

        从列表里一个一个地拿出每一个数值,存储到列表里,作为输出。

        拿出数值:利用 listNode 作为指针,listNode不仅代表列表的节点。通过   listNode = listNode.next  使指针能够移动,指向每一个节点。终止条件就是指针为空,说明遍历完链表。

        存储数值:  result.insert(0,listNode.val)  取出的数值,从头部插入。

 

另外看到一个大神的递归版本:

链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
 

def printListFromTailToHead(self, listNode): 

    # write code here 

    if listNode is None: 

        return [] 

    return self.printListFromTailToHead(listNode.next) + [listNode.val]

递归调用printListFromTailToHead,在传入参数的时候,相当于listNode = listNode.next,同样是移动指针,

+ [listNode.val]取出数值,并保存,并且使得先得出的数值存储在后面。

 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值