题目
输入一个链表的头结点,从尾到头反过来打印出每个节点的值。
- 是否可以改变链表结构?当我们打算修改数据时,最好先询问是否可以修改。
思路
1,用栈:从头到尾遍历链表,将读入的数据入栈;然后从栈顶输出。
2,递归:因为递归本质上就是一个栈结构。每访问一个节点时,先递归输出它后面的节点。(当链表非常长时,会导致函数调用层级很深,有可能导致函数调用栈溢出)
解法一:用栈实现
public class ListNode{ //单链表
private int data;
private ListNode next;
public ListNode(int data){
this.data = data;
}
}
public class ReverseLinked{
//用栈实现
public static void reverse1(ListNode head){
if(head == null){
return;
}
Stack<ListNode> stack = new Stack<>();
while(head != null){
stack.push(head);
head = head.next;
}
while(!stack.isEmpty()){
ListNode node = stack.pop();
System.out.println(node.data);
}
}
//用递归
public static void reverse2(ListNode head){
if(head == null){
return;
}
if(head.next != null){
reserve2(head.next);
}
System.out.println(head.data);
}
}