题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
方法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()));
}
}