《剑指offer》从头到尾打印链表

本文介绍了一种链表逆序打印的方法,通过两种递归方式实现:一是利用ArrayList结合递归特性实现逆序存储;二是借助栈的后进先出特性来达到目的。这两种方法都有效地解决了从尾到头打印链表的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

ps:

注意本题并不是考察LinkedList的知识。
Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
https://www.cnblogs.com/skywang12345/p/3308807.html

解法1:递归

思路

把链表的值倒序存储在动态数组ArraryList,但链表本身遍历本身是顺序的,考虑使用递归的思路,一层函数套一层,最里面那层反而是最先计算的,也就从链表的尾部开始计算。
这里要注意:ArrayList的初始化一定要放在函数外面,放在里面,是没法递归的,这里要将它看做成一个全局变量。

代码:

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {        
    ArrayList<Integer> alist=new ArrayList<Integer>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        
        if(listNode!=null)
        {
            printListFromTailToHead(listNode.next);
            alist.add(listNode.val);
        }
        return alist;
    }
}

解法2:递归

思路

考虑到stack先进先出的特性,链表的头放进栈,出栈的时候尾部会先出来。

代码:

运行时间:12ms

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.Stack;
import java.util.ArrayList;
public class Solution {         
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        
        ArrayList<Integer> alist=new ArrayList<Integer>();
        Stack<Integer> st=new Stack<Integer>();
        while(listNode!=null)
        {
            st.push(new Integer(listNode.val));
            listNode=listNode.next;  
        }
        while(!st.isEmpty())
        {
            alist.add(st.pop());
        }
        return alist;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值