题目:
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
输入:
{1,2,3}
复制
返回值:
[3,2,1]
复制
输入:
{67,0,24,58}
复制
返回值:
[58,24,0,67]
思路一:
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# @param listNode ListNode类
# @return int整型一维数组
#
class Solution:
def printListFromTailToHead(self , listNode: ListNode) -> List[int]:
# write code here
res = []
while(listNode):
res.append(listNode.val)
listNode = listNode.next
return res[::-1]
结果:
知识点:
在编写代码中,我们临时储存的数据是在内存当中,内存就像一块块并列排序的小方盒,每个小方盒都有自己地址,我们储存的数据就在这样一个个小方盒当中。
数组在内存中是按顺序,内存地址来存储的,就好似上图的抽屉,从上到下,按顺序存放物品,中间不能间断,你在第一个抽屉放一个数据,又在第三个抽屉放一个数据,中间空一个抽屉,这是不允许的。这一特征也就意味着数据在内存中是相连的,紧紧不分开的,小的空闲内存空间可能会装不下较多的数据,造成了内存空间浪费。
链表与在内存中排列整齐的数组不同,它们像一堆散兵游勇,散布于内存中,只要哪里有空隙就往哪里钻,链表高效地运用了内存空间。虽然它们看起来杂乱无章,但其实它们井然有序,暗号让它们紧紧相连。数据与数据之间有一条“暗号”的链子相连接,哪个数据在首位,哪个数据在第二位……在末尾都非常清楚。
这种“暗号”其实就是内存地址,一个节点包含了两个方面的内容,数据和“暗号”,这个“暗号”其实就是下一个节点的引用信息。
链表的第一个和最后一个节点最重要和最特殊,最后一个节点则意味着后面没有数据了,所以它指向None,第一个节点的内存地址需要一个地方来保存,所以设立一个head属性对第一个节点应用。
listNode中的val就是数据,next就是下一个节点的引用信息。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。