剑指offer

题目描述:

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

结点定义:

class ListNode {
    int val;
    ListNode next = null;

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

code:

1. 使用头插法:

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        //如果链表为空,返回空list
        if (null == listNode) {
            return new ArrayList<>();
        }
        //定义一个新链表的头节点
        ListNode head = new ListNode(0);
        //遍历链表
        while (null != listNode) {
            //定义新节点
            ListNode temp = new ListNode(listNode.val);
            //新节点的next指向head的next
            temp.next = head.next;
            //head的next指向新节点
            head.next = temp;
            //原链表指向下一个
            listNode = listNode.next;
        }
        //头节点指向下一个
        head = head.next;
        //定义list作为返回值
        ArrayList<Integer> list = new ArrayList<>();
        //遍历链表
        while (null != head) {
            //list添加当前节点的值
            list.add(head.val);
            //链表指向下一个
            head = head.next;
        }
        //返回list
        return list;
    }
}

2. 使用list中方法:

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        //如果链表为空,返回空list
        if (null == listNode) {
            return new ArrayList<>();
        }
        ArrayList<Integer> list = new ArrayList<>();
        //遍历链表
        while (null != listNode) {
            //list第一个位置添加当前节点的值
            list.add(0, listNode.val);
            //链表指向下一个
            listNode = listNode.next;
        }
        //返回list
        return list;
    }
}
原文地址:https://www.cnblogs.com/s-star/p/12483175.html