题目要求:输入一个链表的头结点,从尾到头反过来打印每个结点的值。
此题可以有两种解法
一、不改变链表的结构,从链表的头结点开始,逐个放入栈中(利用栈后进先出的特性),再逐个弹出即可
private static void printListReverse1(Node head) {
if(head == null){
return;
}
int count = 1;
Stack<Integer> stack = new Stack<>();
stack.push(head.value);
while(head.next != null){
head = head.next;
stack.push(head.value);
count++;
}
while(count != 0){ //在调用peek时栈空也会报错,所以采用计数的方法
System.out.println(stack.pop());
--count;
}
}
二、反转链表,打印即可
private static void printListReverse2(Node head) {
Node pre = null;
Node next = null;
while(head != null){
next = head.next;
head.next = pre; //反转链表
pre = head;
head = next;
}
pre.printNode();
}