剑指offer之从尾到头打印链表

来源:互联网 发布:消息认证算法的简称 编辑:程序博客网 时间:2024/05/23 15:37

题目描述:输入一个链表,从尾到头打印链表每个节点的值。

思路:1.首先想到采用递归的思路 从后往前打印

public class Solution {class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}}ArrayList<Integer> list = new ArrayList<>();public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {if (listNode != null) {printListFromTailToHead(listNode.next);list.add(listNode.val);}return list;}}

简洁,但是开销会比较大,函数调用层次太深,会造成栈溢出

2思路:采用栈先进后出的性质,用栈保存链表结点,然后出栈

import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Solution {       public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {         ArrayList<Integer> list = new ArrayList<>();if(listNode == null){return list;//注意不是返回null,而是返回[]}Stack<ListNode> stack = new Stack<>();ListNode current = listNode;while(current!= null){stack.push(current);//遍历入栈current = current.next;}while(!stack.empty()){//出栈list.add(stack.pop().val);}return list;}}
3思路:直接遍历链表保存,然后利用Collections.reverse()进行翻转

import java.util.ArrayList;import java.util.Collections;public class Solution {       public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        ArrayList<Integer> list = new ArrayList<>();if (listNode == null) {return list;}ListNode current = listNode;while (current != null) {list.add(current.val);current = current.next;}Collections.reverse(list);return list;}            }
4思路:先对链表进行反转,然后进行遍历即可。

0 0
原创粉丝点击