面试题5:从尾到头打印链表

2017-02-14 13:33:31.0

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

方法1. 递归打印:

//递归方式
public void reverse0(Node p){ 
   if(p!=null){
       reverse0(p.next);
       System.out.print(p.data+",");
   }   
}

方式2. 利用栈结构

//栈方式
public void reverse1(){
    Node p = this.head.next;
    Stack<Integer> stack = new Stack<Integer>();
    while(p!=null){
        stack.push(p.data);
        p = p.next;
    }
    while(!stack.empty()){
        System.out.print(stack.pop()+",");
    }
}

    递归的方式看似很简洁,但当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。用栈基于循环实现的代码鲁棒性好一些。