• 从尾到头打印链表


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

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

    思路

    从头到尾遍历链表,把每个节点放入栈中,遍历完后,从栈顶开始逐个输出节点的值,
    此时输出的节点的顺序已经反过来了

    实现

    public static void printListReversingly_Iteratively(ListNode node) {
    	Stack<ListNode> stack = new Stack<>();
    	if (node == null) {
    		return;
    	}
    	for (node = node; node != null; node = node.next) {
    		stack.push(node);
    
    	}
    	while (!stack.isEmpty()) {
    		System.out.println(stack.pop().val);
    	}
    }
    

    递归的本质就是一个栈结构,于是要使用递归来实现,我们每访问到一个节点的时候,
    先递归输出它后面的节点,再输出该节点自身,这样链表的输出结果就反过来了

        public static void printListReversingly_Recursively(ListNode node) {
            if (node == null) {
                return;
            }
            printListReversingly_Iteratively(node.next);
            System.out.println(node.val);
        }
    

    测试用例

        public static  void test() {
            ListNode ListNode1 = new ListNode(1);
            ListNode ListNode2 = new ListNode(2);
            ListNode ListNode3 = new ListNode(3);
            ListNode ListNode4 = new ListNode(4);
            ListNode ListNode5 = new ListNode(5);
            ListNode1.next=ListNode2;
            ListNode2.next=ListNode3;
            ListNode3.next=ListNode4;
            ListNode4.next=ListNode5;
            System.out.println("采用栈:");
            printListReversingly_Iteratively(ListNode1);
            System.out.println("采用递归:");
            printListReversingly_Recursively(ListNode1);
        }
    

    输出

    采用栈:
    5
    4
    3
    2
    1
    采用递归:
    5
    4
    3
    2
    1
    
    
  • 相关阅读:
    常见的arp欺骗
    ARP欺骗分析
    周总结
    周总结
    周总结
    win10下 修改host文件 新添域名不生效
    周总结
    周总结
    周总结
    周总结
  • 原文地址:https://www.cnblogs.com/aiguozou/p/11461223.html
Copyright © 2020-2023  润新知