题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路一:创建一个list,将链表值加入;然后反转输出
python
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
resultlist=[]
while listNode:
resultlist.append(listNode.val)
listNode=listNode.next
resultlist.reverse()
return resultlist
JAVA三种方式
思路一:利用Collections的reverse方法,类似python
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> res = new ArrayList<>();//创建res
while (listNode != null)//!=null
{
res.add(listNode.val);
listNode = listNode.next;
}
Collections.reverse(res);//利用Collections对res反转
return res;
}
}
思路二:借助堆栈的“后进先出”实现
先将元素存入堆栈;再取出堆栈中元素存入数组列表
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> nums = new Stack<>();
while (listNode != null)
{
nums.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> res = new ArrayList<>();
while (!nums.isEmpty())
res.add(nums.pop());
return res;
}
}
思路三:借助递归实现(递归的本质还是使用了堆栈结构)
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> res = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode pNode = listNode;
if (pNode != null)
{
if (pNode.next != null)
this.printListFromTailToHead(pNode.next);
res.add(pNode.val);
}
return res;
}
}