剑指offer-面试题05-从尾到头打印链表

本文介绍两种实现链表逆序打印的方法:一是使用栈来存储链表元素再弹出;二是采用递归方式,先递归到链表尾部再依次打印节点值。
package case05_ListNode;

import java.util.Stack;

public class ListNodeFromTailToHead {

	public static void main(String[] args) {
		ListNode1 listN1 = new ListNode1(1);
		ListNode1 listN2 = new ListNode1(2);
		ListNode1 listN3 = new ListNode1(3);
		ListNode1 listN4 = new ListNode1(4);
		ListNode1 listN5 = new ListNode1(5);
		ListNode1 listN6 = new ListNode1(6);
		ListNode1 listN7 = new ListNode1(7);
		listN1.next = listN2;
		listN2.next = listN3;
		listN3.next = listN4;
		listN4.next = listN5;
		listN5.next = listN6;
		listN6.next = listN7;
		listN7.next = null;
		System.out.println("//方法1:利用栈从尾到头打印链表");
		//方法1:利用栈从尾到头打印链表
		printFromHailToHead1(listN1);
		System.out.println();
		System.out.println("//方法2:利用递归方式");
		//方法2:利用递归方式
		printFromTailToHead2(listN1);
	}

	// 定义节点结构
	public static class ListNode1 {
		int val;
		public ListNode1(int val) {
			this.val = val;
		}
		ListNode1 next = null;
	}

	// 方法1:利用栈的方式实现。
	public static void printFromHailToHead1(ListNode1 list1) {
		Stack<Integer> stack1 = new Stack<>();
		if (list1 == null)
			return;
		//压入栈stack1里面
		while (list1 != null) {
			stack1.push(list1.val);
			list1 = list1.next;
		}
		//出栈
		while(!stack1.empty()){
			System.out.print(stack1.pop()+" ");
		}
	}
	//方法2:利用递归的方法实现
	public static void printFromTailToHead2(ListNode1 list2){
		if(list2 == null){
			return;
		}
		else{
			printFromTailToHead2(list2.next);
			System.out.print(list2.val + " ");
		}
	}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值