问题描述:输入一个链表,从尾到头打印链表每个节点的值。
时间限制:1秒 空间限制:32768K
# -*- 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
list = []
if listNode is None:
return list
while listNode.next is not None:
list.append(listNode.val)
listNode = listNode.next #防止内存超限
list.append(listNode.val)
list.reverse()
return list
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
/*
* Stack<Integer> stack=new Stack<Integer>();
* //队列和栈,从尾到头打印链表,离不开借助栈
* //所以,先把链表里的东西,都放到一个栈里去,然后按顺序把栈里的东西pop出来 while(listNode!=null){
* stack.push(listNode.val); listNode=listNode.next; }
*
* ArrayList<Integer> list=new ArrayList<Integer>();
* while(!stack.isEmpty()){ list.add(stack.pop()); } return list; }
*/
if (listNode != null)
{
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}
c++不使用栈结构stack,直接利用翻转函数reverse()函数和容器vector
每访问到一个结点的时候,取出节点的值放入容器中,最后使用翻转函数reverse()将容器翻转。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
struct ListNode* pNode=head;
while(pNode!=NULL){
result.push_back(pNode->val);
pNode=pNode->next;
}
reverse(result.begin(),result.end());//applying reverse()
return result;
}
};
更多c++方法可以参照博客:https://www.cnblogs.com/codingmengmeng/p/5857055.html