从尾到头打印链表

来源:互联网 发布:java逆波兰式 编辑:程序博客网 时间:2024/06/14 22:14

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

/** * 解法一——使用栈的出栈和入栈,完成数据的逆序 */import java.util.ArrayList;import java.util.Stack;// 链表中节点的定义class ListNode {    int val;    // 节点数据域    ListNode next = null;   // 下一节点指针    // 初始化节点的构造器    ListNode(int val) {        this.val = val;    }}public class Solution {    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        // 创建一个栈        Stack<Integer> stack = new Stack<>();        // 将链表中数据元素入栈        while (listNode != null) {            stack.push(listNode.val);            listNode = listNode.next;        }        // 数据元素出栈,并放入ArrayList中        ArrayList<Integer> list = new ArrayList<>();        while (!stack.isEmpty()) {            list.add(stack.pop());        }        return list;           }}
/** * 解法二——利用Collections.reverse()方法完成反转操作 */import java.util.ArrayList;import java.util.Collections;class ListNode {    int val;    // 节点数据域    ListNode next = null;   // 指向下一个节点的指针    // 初始化节点的构造器    ListNode(int val) {        this.val = val;    }}public class Solution {    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        ArrayList<Integer> list = new ArrayList<Integer>();        while (listNode != null) {            list.add(listNode.val);            listNode = listNode.next;        }        // 使用Collections的reverse方法,直接将list反转        Collections.reverse(list);        return list;    }}
/** * 解法三——递归调用,将数据放入list中 */import java.util.ArrayList;class ListNode {    int val;    // 节点数据域    ListNode next = null;   // 指向下一个节点的指针    // 初始化节点的构造器    ListNode(int val) {        this.val = val;    }}public class Solution {    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        ArrayList<Integer> list = new ArrayList<Integer>();        if (listNode == null) return list;        get(listNode, list);        return list;    }    public void get(ListNode listNode, ArrayList<Integer> list) {        if (listNode.next == null) {            list.add(listNode.val);            // 退出递归调用            return;        }        // 递归调用,加入数据        get(listNode.next, list);        list.add(listNode.val);    }}