3. 从尾到头打印链表

2020-03-25  本文已影响0人  养鹅防老

3.1 题目

输入一个链表的头结点,从尾到头反过来打印出每个结点的值。

3.2 解题思路

3.3 实现代码

有两种解法,任选一种。

public class Test { 
    // 结点对象
    public static class ListNode { 
        int val; // 结点的值 
        ListNode nxt; // 下一个结点
    }
    
    /** 
     * 输入个链表的头结点,从尾到头反过来打印出每个结点的值 
     * 使用栈的方式进行,栈为先入后出的方式
     * @param root 链表头结点 
     */
    public static void printListInverselyUsingIteration(ListNode root) {
        Stack<ListNode> stack = new Stack<>(); //创建栈,指定泛型为ListNode
        while(root != null) { //如果节点不为空
            stack.push(root); //把节点压入栈
            root = root.next; //指向下一个节点
        } 
        ListNode tmp; //创建一个临时ListNode对象
        while(!stack.isEmpty()) { 
            tmp = stack.pop(); //出栈方法的返回值就是一个节点
            System.out.print(tmp.val + " "); //一个个把节点的值给输出
        }
    }
}
 /** 
     * 输入个链表的头结点,从尾到头反过来打印出每个结点的值 
     * 使用递归的方式进行 
     * @param root 链表头结点 
     */
    public static void printListInverselyUsingRecursion(ListNode root){ //递归方式时间超出,在牛客网上未通过。用栈
        if(root != null) { 
            printListInverselyUsingRecursion(root.next); //递归
            System.out.print(root.val + " ");
        }
    }

递归方式时间超出,在牛客网上未通过。得用栈。

上一篇 下一篇

猜你喜欢

热点阅读