从尾到头打印链表 - Java

题目描述:

输入一个链表,从尾到头打印链表每个节点的值。

基本思路:

  • 通常,不允许改变链表原有结构

1)后进先出 --> 栈
2)递归:本质上就是栈结构;但,链表很长时,函数调用层级很深,容易导致函数调用栈溢出
3)牛客上返回ArrayList,所以使用两个AL,新旧复制

总结:

stack用法:

  • push(Object obj):压入栈
  • pop():弹出栈顶元素,删除
  • peek():取出栈顶元素,但不删除
  • empty():判断是否为空

代码:

1)ArrayList - 牛客

//ArrayList - 牛客
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode){
		
		ArrayList al = new ArrayList();
		ArrayList alNew = new ArrayList();
		
		if(listNode == null)
			return al;
		
		while(listNode != null){
			al.add(listNode.val);
			listNode = listNode.next;
		}
		
		int length = al.size();
		
		for(int i=length-1; i>=0; i--){
			alNew.add(al.get(i));
		}

		return alNew;		
	}

2)堆版:

public static Stack<Integer> printReverse(ListNode listNode){
		
		Stack<Integer> stack = new Stack<Integer>();
		
		while(listNode != null){
			stack.push(listNode.val);
			listNode=listNode.next;
		}
		return stack;
	}

3)递归版:


posted @ 2017-04-23 03:16  gleesu  阅读(402)  评论(0编辑  收藏  举报