关于数据结构与算法:每日leetcodeJZ6-从尾到头打印链表

题目

输出一个链表的头节点,按链表从尾到头的程序返回每个节点的值(用数组返回)。

示例1
输出:
{1,2,3}
复制
返回值:
[3,2,1]
复制

示例2
输出:
{67,0,24,58}
复制
返回值:
[58,24,0,67]

思路

第一反馈这不就是反转链表吗,但认真审题后,发现和翻转链表并不一样。
题目要求的是,返回链表翻转后的每个节点的值。
如果用翻转链表的思路,要先翻转链表,再遍历翻转链表的每个节点。这么做无论空间还是工夫复杂度都不够简洁。

更优雅的思路是,只遍历一次原链表,将每个节点的值存在栈中,最初再将栈的元素一一pop进去存在一个数组中,或者利用python中的切片间接返回栈的逆序,利用栈的先进后出的个性,实现翻转。

def printListFromTailToHead(self , listNode: ListNode) -> List[int]:
    curNode = listNode
    stack = []
    
    while curNode:
        stack.append(ptr.val)
        curNode=curNode.next
    
    return stack[::-1]

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理