剑指offer(python版本)--题目3--返回一个arraylist

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

问题:1 ,如何输入一个链表?—字典
2. 如何获得链表值 --字典映射 ?指针 数值
3. 如何从头到尾顺序返回?---- for i in range ()返回 总体来说就是将字典转化为列表 (简单说就是把这个链表上的节点一个个读到列表中,然后用[::-1]切片的方法实现逆序)
b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象

> **补充**
>     > a = [0,1,2,3,4,5,6,7,8,9] 
           b = a[i:j]   # [1,2] 
           当i缺省时,默认为0,即 a[:3]相当于a[0:3] ;
           当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10] 
           当i,j都存在时,表示复制i到j的数据
           当i,j都缺省时,a[:]就相当于完整复制一份a
>    
>    b = a[i:j:s]表示:i,j与上面的一样,但s表示步进,
            缺省为1. 所以a[i:j:1]相当于a[i:j]
>     当s<0时,i缺省时,默认为-1.
          j缺省时,默认为-len(a)-1 所以a[::-1]相当于 a[-1:-len(a)-1:-1],
          也就是从最后一个元素到第一个元素复制一遍,即倒序。

http://www.cnblogs.com/mxh1099/p/5804064.html

用两个vector,一个vector在链表遍历的时候存储链表的值,另一个vector反向输出
在牛客网上执行

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # @listNode: 头结点
        # write code here
        l = []
        while listNode:
            l.append(listNode.val)
            listNode = listNode.next
        return l[::-1] 

在Spyder上执行有一些不一样,因为把数据放在里面了,这里是不是就已经默认链表不为空???
看一下需要什么参数,逻辑顺序应该是怎么样的

# 实现一个链表类,只有一个值val和一个指向下一个节点的next'指针'
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # @listNode: 头结点
        # write code here
        l = []
        while listNode:
            l.append(listNode.val)
            listNode = listNode.next
        return l[::-1] 

# 创建链表 a->b->c
a = ListNode(1)
b = ListNode(2)
c = ListNode(3)
a.next = b
b.next = c

# 实例化
if __name__=='__main__':
    demo = Solution()
    print(demo.printListFromTailToHead(a))

猜你喜欢

转载自blog.csdn.net/qq_24429333/article/details/87857344