题目要求
输入一个链表,从尾到头放入ArrayList并返回。
C++实现
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector printListFromTailToHead(ListNode* head) { ListNode *p=head; vector ArrayList; while(p!=nullptr){ ArrayList.push_back(p->val); p=p->next; } reverse(ArrayList.begin(),ArrayList.end()); return ArrayList; }};
头插vector效率很低,所以采用先push_back,后翻转vector的方式。
同样的思路使用Python实现如下。Python实现
非递归实现
# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): ArrayList=[] while listNode is not None: ArrayList.append(listNode.val) listNode=listNode.next ArrayList.reverse() return ArrayList
递归实现
# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code here if listNode is None: return [] return self.printListFromTailToHead(listNode.next) + [listNode.val]