剑指offer:从头到尾打印链表(python)

从头到尾打印链表

题目位置(点击链接)
代码位置(点击链接)

方法1:

思路
硬做,放入列表,翻转列表

class Solution:
    def printListFromTailToHead(self, listNode):
        newList = []
        while listNode:
            newList.append(listNode.val)
            listNode = listNode.next
        return newList[::-1]

运行时间:29ms 占用内存:5848k

方法2:

思路:
使用栈的先进后出特性,全部压入,然后全部弹出

class Solution:
    def printListFromTailToHead(self, listNode):
        stack = []
        while listNode:
            stack.append(listNode.val)
            listNode = listNode.next        
        list = []
        while stack:
            list.append(stack.pop())
        return list

运行时间:25ms 占用内存:5732k

涉及知识点:

什么是链表?

链表的特性
当进行插入和删除操作时,链表操作的时间复杂度仅为O(1)。另外,因为链表在内存中不是连续存储的,所以可以充分利用内存中的碎片空间。

链表的种类
链表包括单链表,双向链表,循环单链表,循环双链表。

单链表,由各个元素之间通过一个指针彼此链接。元素之间不能相互指向。每个元素包含两部分:数据成员和一个称为next的指针。
在这里插入图片描述
双向链表,每个链表元素既有指向下一个元素的指针,又有指向前一个元素的指针,其中每个结点都有两种指针。每个元素包含两部分:数据成员,一个称为pre的指针,一个称为next的指针。
在这里插入图片描述

循环链表,是在单链表和双向链表的基础上,使最后一个结点指向第一个结点从而实现循环。
在这里插入图片描述

什么是栈?

什么是栈?栈的python实现和方法

列表切片

Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。
格式:【start: end :step】

索引
索引包括:正索引和负索引两部分,如下图所示,以a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
在这里插入图片描述
start:起始索引,从0开始,-1表示结束
end:结束索引
step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值。
注意:切片的结果不包含结束索引,即不包含切的最后一位

a=[1,2,3,4,5,6]

#省略全部,代表截取全部内容,可以用来将一个列表拷给另一个列表
b1=a[:] 
print(b1)
结果:[1, 2, 3, 4, 5, 6]

#从位置0开始到结束,每次增加1,截取。不包含结束索引位置
b=a[0:-1:1] 
print(b)
结果:[1, 2, 3, 4, 5]

#省略起始位置的索引,以及步长。默认起始位置从头开始,默认步长为1,结束位置索引为3
c1=a[:3] 
print(c1)
结果:[1, 2, 3]

#从第一个位置到第留给位置,每3个取一个值
c=a[0:5:3] 
print(c)
结果:[1, 4]

#反向取值
d=a[5:0:-1]
print(d)
结果:[6, 5, 4, 3, 2]

#反转列表
d1=a[::-1]
print(d1)
结果:[6, 5, 4, 3, 2, 1]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值