剑指offer problem 5:从尾到头打印链表(java)


import java.util.Stack;

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

//首先定义链表结构
class LinkNode {
    LinkNode next;
    int node_value;
}

public class PrintListReversely {
    /**
     * 递归实现
     * @param headNode 头结点
     */
    private void recursivelyPrint(LinkNode headNode) {
        if (headNode.next == null){
            System.out.print(headNode.node_value  + " ");
        }else {
            recursivelyPrint(headNode.next);
            System.out.print(headNode.node_value  + " ");
        }
    }

    /**
     * 用栈的思想来实现
     * @param headNode 头结点
     */
    private void reversePrint(LinkNode headNode) {

        Stack<LinkNode> stack = new Stack<>();
        while (headNode != null) {
            stack.push(headNode);
            headNode = headNode.next;
        }

        while (!stack.isEmpty()) {
            System.out.print(stack.pop().node_value + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        //输入的链表有多个结点
        PrintListReversely plr = new PrintListReversely();
        LinkNode node1 = new LinkNode();
        LinkNode node2 = new LinkNode();
        LinkNode node3 = new LinkNode();
        LinkNode node4 = new LinkNode();
        node1.node_value = 1;
        node2.node_value = 2;
        node3.node_value = 3;
        node4.node_value = 0;
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        plr.reversePrint(node1);
        plr.recursivelyPrint(node1);
    }
}

result:

0 3 2 1 
0 3 2 1 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容