面试题5-从尾到头打印链表

来源:互联网 发布:手机淘宝有什么活动 编辑:程序博客网 时间:2024/06/06 03:05

从尾到头打印链表

题目描述

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


输出描述:
输出为需要打印的“新链表”的表头
代码:

/***    public class ListNode {*        int val;*        ListNode next = null;**        ListNode(int val) {*            this.val = val;*        }*    }**/import java.util.ArrayList;public class Solution {    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        //特殊情况处理        ArrayList<Integer> list = new ArrayList<Integer>();        if(listNode == null){return list;}                //将链表倒置        ListNode p = listNode, q = listNode.next, t;        while(q != null){            t = q.next;            q.next = p;            p = q;            q = t;        }                //将链表放置到ArrayList中        while(p != null){            list.add(p.val);            p = p.next;        }        return list;    }}

上述代码会提示内存不足,因此需要想到更快的办法。。。想到用栈这个数据结构,代码如下:

/***    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) {        //特殊情况处理        ArrayList<Integer> list = new ArrayList<Integer>();        if(listNode == null){return list;}                //将链表节点的值依次入栈        Stack<Integer> stack = new Stack<Integer>();        for(ListNode p = listNode; p != null ; p = p.next){            stack.push(p.val);        }                //出栈的节点依次加到list中        while(!stack.isEmpty()){            list.add(stack.pop());        }                return list;    }}

注意要引入java.util.Stack。。。


0 0
原创粉丝点击