题目:输入一个链表的头结点,从尾到头反过来打印每个结点的值。
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
浙公网安备 33010602011771号