天天看点

常见算法题总结(剑指6)

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

方法1:可以反转单链表。但是会修改原来的链表结构。题目的要求是单纯想要读取数据的顺序而已。

方法2:从头到尾,从尾到头,先进后出,后进先出。一看见这种就想到栈数据结构。当遍历这个单链表的时候,把当前节点的值压入栈中,当便利到最后一个节点的时候,最后节点的值在栈顶位置。然后再依次把栈弹出就可以了。

        空间O(n):需要一个栈来存储节点

        时间O(n):遍历一遍单链表和栈。

Java代码如下:

ListNode listNode1 = new ListNode();
        listNode1.setValue(1);
        ListNode listNode2 = new ListNode();
        listNode2.setValue(2);
        ListNode listNode3 = new ListNode();
        listNode3.setValue(3);
        ListNode listNode4 = new ListNode();
        listNode4.setValue(4);
        ListNode listNode5 = new ListNode();
        listNode5.setValue(5);
        listNode1.setNext(listNode2);
        listNode2.setNext(listNode3);
        listNode3.setNext(listNode4);
        listNode4.setNext(listNode5);
        reversePrint(listNode1);
    }
    public static void reversePrint(ListNode head) {
        ListNode currunt = head;
        Stack<ListNode> stack = new Stack();
        while (currunt != null ){
            stack.push(currunt);
            currunt = currunt.getNext();
        }
        while (stack.size()>0){
            System.out.printf(String.valueOf(stack.pop().getValue()));
        }
    }
           

继续阅读