面试题5:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每一个结点的值。
这个题目可以有三种做法:
1)递归
2)用到栈
3)存储到数组或者其他容器,然后倒着遍历(不好)
题目:输入一个链表的头结点,从尾到头反过来打印出每一个结点的值。
这个题目可以有三种做法:
1)递归
2)用到栈
3)存储到数组或者其他容器,然后倒着遍历(不好)
主要实现递归和利用栈的两种方式:
Java代码实现如下:
import java.util.Stack;
public class Solution{
//递归的方式
public static void showRevertNode(ListNode head){
if(head==null){
return;
}
showRevertNode(head.next);
System.out.println(head.data);
}
//利用栈的方式
public static void showRevertNode2(ListNode head){
if(head==null){
return;
}
Stack<ListNode> stack = new Stack<>();
while(head!=null){
stack.push(head);
head = head.next;
}
while(!stack.isEmpty()){
ListNode tempNode = stack.pop();
System.out.println(tempNode.data);
}
}
public static void main(String[] args){
ListNode head = new ListNode(0);
head.next = new ListNode(1);
head.next.next = new ListNode(2);
showRevertNode2(head);
}
}
class ListNode{
int data;
ListNode next;
public ListNode(int data){
this.data = data;
}
}