在不改变链表结构的情况下,从链表的结尾开始打印节点,直到将首节点打印完成。不改变链表结构意味着不能先将链表反转然后在按顺序打印。

不过我们可以利用栈的先进后出的特点,按顺序将节点压入栈中,然后在一个个出栈,就能实现这个题目的要求。

//逆序遍历链表,不改变链表的结构,传入的head表示第一个节点,不是头结点
public static void reversePrint(HeroNode head){
    //判断链表是否为空
    if(head == null){
        return;
    }

    //定义栈
    Stack<HeroNode> stack = new Stack<HeroNode>();

    //定义打印链表的当前节点
    HeroNode curr = head;

    //遍历链表,压栈
    while(curr != null){
        stack.push(curr);
        curr = curr.next;
    }

    //循环出栈
    while (stack.size() > 0){
        System.out.println(stack.pop());
    }
}