剑指offer系列-从尾到头打印链表

本人对java语言更熟悉,所以剑指offer代码都是通过Java实现,且涉及的核心代码全部通过牛客网的测试用例检查,感谢牛客网为我检验程序提供了极大帮助!main函数是为了在自己运行程序时,运行结果更直观化。

/**
	 * 从尾到头打印链表
	 * 题目描述:输入一个链表,从尾到头打印链表每个节点的值。 
		输入描述:输入为链表的表头
		输出描述:输出为需要打印的“新链表”的表头
	 */
import java.util.ArrayList;
import java.util.Stack;

/**
 * public class ListNode { int val; ListNode next = null;
 * 
 * ListNode(int val) { this.val = val; } }
 * 
 */
class ListNode {
	int val;
	ListNode next = null;

	ListNode(int val) {
		this.val = val;
	}
}

public class offerT5 {
	public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
		Stack<Integer> stack = new Stack<Integer>();
		// 队列和栈是一对好基友,从尾到头打印链表,当然离不开借助栈的帮忙啦
		// 所以,先把链表里的东西,都放到一个栈里去,然后按顺序把栈里的东西pop出来,就这么简单
		ArrayList<Integer> list = new ArrayList<Integer>();
		while (listNode == null) {//判断是否空链表,空则返回空ArrayList
			return list;
		}
		while (listNode != null) {
			stack.push(listNode.val);
			listNode = listNode.next;
		}

		while (!stack.isEmpty()) {
			int member = stack.pop();//Integer封装类型自动转为int基本数据类型
			list.add(member);
		}
		return list;
	}

	public static void main(String[] args) {
		ArrayList<ListNode> list = new ArrayList<ListNode>();
		ListNode a = new ListNode(1);
		ListNode b = new ListNode(2);
		ListNode c = new ListNode(1);
		ListNode d = new ListNode(3);
		ListNode e = new ListNode(4);

		list.add(a);
		list.add(b);
		list.add(c);
		list.add(d);
		list.add(e);

		for (int i = 0; i < list.size() - 1; i++) {//建立指针连接
			list.get(i).next = list.get(i + 1);
		}
		list.get(list.size() - 1).next = null;
		offerT5 T5 = new offerT5();
		ArrayList<Integer> list2 = T5.printListFromTailToHead(a);
		for (Integer i : list2) {//增强型for循环
			System.out.print(i.intValue());
		}

	}

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值