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

public class ListNode{
       int value;
       ListNode next;

       public ListNode(int value,ListNode node){
             this.value=value;
             this.next=node;
       }
}

方法一(使用栈):

import java.util.Stack;

public class Solution{
     public static void printListReversingly_Iteratively(ListNode node){
         if(node==null){
             return;
         }
         Stack<ListNode> stack=new Stack<>();
         while(node!=null){
             stack.push(node);
             node=node.next;
         }
         while(!stack.empty()){
             ListNode listNode=stack.pop();
             System.out.print(listNode.value+" ");
         }
     }

     public static void main(String[] args){
         ListNode n6=new ListNode(6,null);
         ListNode n5=new ListNode(5,n6);
         ListNode n4=new ListNode(4,n5);
         ListNode n3=new ListNode(3,n4);
         ListNode n2=new ListNode(2,n3);
         ListNode n1=new ListNode(1,n2);
         printListReversingly_Iteratively(n1);  
     }
}

方法二(使用递归):

public class Solution{
     public static void printListReversingly_Iteratively(ListNode node){
         if(node!=null){
            if(node.next!=null){
                 printListReversingly_Iteratively(node.next);
            }
            System.out.print(node.value+" ");
         }
     }

     public static void main(String[] args){
         ListNode n6=new ListNode(6,null);
         ListNode n5=new ListNode(5,n6);
         ListNode n4=new ListNode(4,n5);
         ListNode n3=new ListNode(3,n4);
         ListNode n2=new ListNode(2,n3);
         ListNode n1=new ListNode(1,n2);
         printListReversingly_Iteratively(n1);  
     }
}

方法二代码看起来很简洁,但是有一个问题:当链表非常长的时候,就会导致函数调用层级很深,从而有可能导致函数调用栈溢出。方法一显示用栈基于循环实现的代码的鲁棒性要好一些。

 

 posted on 2018-12-18 21:28  会飞的金鱼  阅读(80)  评论(0)    收藏  举报