[JZ6][链表]从尾的到头打印链表[Java]

题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值.

 用Java定义的链表的数据结构:

class ListNode{
    int val;
    ListNode next;
    public ListNode(int val){
        this.val = val;
    }
}

分析:

         那就直接遍历单链表,然后把每个节点的值都存起来然后倒序输出即可.

这个题目使用来作为中间件刚刚好,因为栈是先进后出的.

或者利用数组也可以,输出的时候控制下标就行. 

class JZ6{
    
    public static void printListFromTailToHead(ListNode listNode) {

        //创建一个栈
        Stack<Integer> stack = new Stack<>();
        //指针直接指向 头结点
        ListNode p = listNode;
        
        while(p!=null){//p的指向不为空则继续遍历.
            stack.push(p.val);//将每个节点的值压入栈中
            p=p.next;
        }

        while(!stack.empty()){
            //栈不为空,就把栈打印空
            System.out.println(stack.pop());
        }
    }

}

既然能用栈,那就很容易想到递归.

但是系统这样有一个问题,就是如果链表过长,会导致系统栈溢出.因此还是上面的那个代码性能更加稳定.

   public static void digui(ListNode head){
        if(head!=null){
            digui(head.next);
            System.out.println(head.val);
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值