【剑指offer】面试题05:从尾到头打印链表

来源:互联网 发布:三得利乌龙茶 知乎 编辑:程序博客网 时间:2024/06/04 19:58

题目

输入一个链表,从尾到头打印链表每个节点的值。

思路

  思路1:遍历链表,从尾到头打印。遍历是从头到尾,但输出却是从尾到头,“先进后出”,使用栈(Stack)实现。
  思路2:递归。但是不建议使用,因为当链表非常长的时候,函数调用的层级很深,有可能导致函数调用栈溢出。

代码实现

1.思路1,使用栈实现。

/***    public class ListNode {*        int val;*        ListNode next = null;**        ListNode(int val) {*            this.val = val;*        }*    }*/import java.util.ArrayList;import java.util.Stack;public class Solution {    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        Stack<Integer> stack = new Stack<Integer>();        ArrayList<Integer> list = new ArrayList<Integer>();        //遍历        while(listNode!=null){            stack.push(listNode.val);//入栈            listNode = listNode.next;        }        while(!stack.isEmpty()){            list.add(stack.pop()); //出栈,保存在list中        }        return list;    }}

2.思路2:递归版本。

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

注:运行环境:牛客网OJ

阅读全文
0 0