剑指Offer面试题5——从尾到头打印链表

复习算法,15天内刷完剑指Offer

那么多学技术的都可以成功,凭什么我不行?

目录

 

1、题目

2、解题思路

3、代码实现

解法1

解法2

递归的另一种写法

收获


更多:《剑指Offer》Java实现合集

 

1、题目

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

class Node {
    int val;
    Node next = null;

    public Node(int val) {
        this.val = val;
    }
}

2、解题思路

        首先可以想到链表反转,但是链表反转会改变原数组的结构。不推荐。本次介绍不反转的方式。

        结点遍历顺序只能从头到尾,但是输出的顺序却为从尾到头,是典型的“后进先出”问题,这就要联想到使用栈,从而也可以联想到使用递归。

3、代码实现

解法1

  /*采用栈的方式*/
    public void printListReversingly_Iteratively(Node node) {
        Stack<Node> nodeStack = new Stack<>();
        while (node != null) {
            nodeStack.push(node);
            node = node.next;
        }
        while (!nodeStack.empty()) {
            System.out.println(nodeStack.pop().val);
        }
    }

解法2

 /*采用递归的方式*/
    public void printListReversingly_Recursively(Node node) {
        if (node != null) {
            printListReversingly_Recursively(node.next);
            System.out.println(node.val);
        } else {
            return;
        }
    }

递归的另一种写法

   /*递归第二种写法*/
    public void printListReversingly_Recursively2(Node node) {
        if (node != null) {
            if (node.next != null) {
                printListReversingly_Recursively2(node.next);
            }
            System.out.println(node.val);
        }
    }

收获

  1.对于“后进先出”问题,要快速想到”栈“,也同时想到递归。

  2.采用递归时,返回的函数值不一定要有赋值操作,只要实现了遍历的作用就可以了,上面牛客网的代码可以多多学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值