#yyds干货盘点#剑指 Offer 06. 从尾到头打印链表

2021年11月25日 阅读数:1
这篇文章主要向大家介绍#yyds干货盘点#剑指 Offer 06. 从尾到头打印链表,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

题目

输入一个链表的头节点,从尾到头反过来返回每一个节点的值(用数组返回)。node

示例 1:数组

输入:head = [1,3,2]
输出:[2,3,1]

限制:markdown

0 <= 链表长度 <= 10000ide

个人答案

#yyds干货盘点#剑指 Offer 06. 从尾到头打印链表


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */

class Solution {
    public int[] reversePrint(ListNode head) {
        //建立一个动态的数组
        ArrayList<Integer> a = new ArrayList<>();
        //遍历链表,而且记录到a这个动态数组中
        ListNode node =head;
        while(node!=null){
            a.add(node.val);
            node=node.next;
        }
        int temp;
        //逆置动态数组
        for(int i=0,j=a.size()-1;i<(a.size())/2;i++,j--){
            temp=a.get(i);
            a.set(i,a.get(j));
            a.set(j,temp);

        }
        //建立int[],用于返回参数
        int[] d = new int[a.size()];
        for(int i = 0;i<a.size();i++){
            d[i] = a.get(i);
        }

         return d;

    }
}

优质答案

    // 执行用时 : 0 ms, 在全部 Java 提交中击败了 100.00% 的用户
    // 内存消耗 : 39.8 MB, 在全部 Java 提交中击败了 100.00% 的用户
    // 不使用栈,不使用递归
class Solution {

    public static int[] reversePrint(ListNode head) {
        ListNode node = head;
        int count = 0;
        while (node != null) {
            ++count;
            node = node.next;
        }
        int[] nums = new int[count];
        node = head;
        for (int i = count - 1; i >= 0; --i) {
            nums[i] = node.val;
            node = node.next;
        }
        return nums;
    }
}

回顾一下ArrayListcode

方法 返回值 说明
add(int index, E element) void 在列表的指定位置插入指定元素(可选操做)
addAll(int index, Collection<? extends E> c) boolean 将指定 collection 中的全部元素都插入到列表中的指定位置(可选操做)
get(int index) E 返回列表中指定位置的元素
indexOf(Object o) int 返回此列表中第一次出现的指定元素的索引;若是此列表不包含该元素,则返回 -1
lastIndexOf(Object o) int 返回此列表中最后出现的指定元素的索引;若是列表不包含此元素,则返回 -1
listIterator() ListIterator 返回此列表元素的列表迭代器(按适当顺序)
listIterator(int index) ListIterator 返回此列表元素的列表迭代器(按适当顺序),从列表的指定位置开始
remove(int index) E 移除列表中指定位置的元素(可选操做)
set(int index, E element) E 用指定元素替换列表中指定位置的元素(可选操做)
subList(int fromIndex, int toIndex) List 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图

在这里插入图片描述