剑指offer:3. 从头到尾打印链表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qinjisheng_11/article/details/89466205

从头到尾打印链表

题目:

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList

想法一:

完全使用递归的方法:

ArrayList<Integer> list = new ArrayList<Integer>();

public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
    if (listNode != null) {
        printListFromTailToHead(listNode.next);
        list.add(listNode.val);
    }
    return list;
}

在这里插入图片描述

想法二:

使用链表逆置的方法:

public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		if (listNode == null) {
			return list;
		}
		ListNode pre = listNode.next;
		ListNode post = pre.next;
		listNode.next = null;
		while (post != null) {
			pre.next = listNode;
			listNode = pre;
			pre = post;
			post = post.next;
		}

		pre.next = listNode;
		listNode = pre;

		while (listNode != null) {
			list.add(listNode.val);
			listNode = listNode.next;
		}

		return list;
	}

在这里插入图片描述

想法三:

使用栈的方法

import java.util.ArrayList;
import java.util.*;
public class Solution {
   public  ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		if (listNode == null) {
			return list;
		}

		Stack<ListNode> stack = new Stack<ListNode>();
		while (listNode != null) {
			stack.push(listNode);
			listNode = listNode.next;
		}

		while (!stack.isEmpty()) {
			ListNode pop = stack.pop();
			list.add(pop.val);
		}

		return list;
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qinjisheng_11/article/details/89466205