码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指 Offer】06.从尾到头打印链表

时间:2021-01-04 11:07:36      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:next   方法   list()   sys   数组   ati   nod   链表   cpp   

题目描述

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

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

限制: 0 <= 链表长度 <= 10000

Java

public class Solution06 {
    public static void main(String[] args) {
        ListNode n1 = new ListNode(1);
        ListNode n2 = new ListNode(3);
        ListNode n3 = new ListNode(2);
        n1.next = n2;
        n2.next = n3;
        n3.next = null;
        Solution s = new Solution();
        System.out.println(Arrays.toString(s.reversePrint(n1)));
        System.out.println(Arrays.toString(s.reversePrint2(n1)));
    }
}

class Solution {
    ArrayList<Integer> tmp = new ArrayList<>();

    /**
     * 方法一:递归
     */
    public int[] reversePrint(ListNode head) {
        reCur(head);

        // int[] Integer[] List<Integer> 三种转换

        // int[] -> Integer[] 
        // Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);
        // int[] -> List<Integer>
        // List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());

        // Integer[] -> int[]
        // int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray();
        // Integer[] -> List<Integer>
        // List<Integer> list2 = Arrays.asList(integers1);

        // List<Integer> -> int[]
        // int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();
        // List<Integer> -> Integer[]
        // Integer[] integers2 = list1.toArray(new Integer[0]);

        return tmp.stream().mapToInt(Integer::valueOf).toArray();
    }

    void reCur(ListNode head) {
        if (head == null) return;
        reCur(head.next);
        tmp.add(head.val);
    }

    /**
     * 方法二:辅助栈
     */
    public int[] reversePrint2(ListNode head) {
        Stack<ListNode> stack = new Stack<>();
        while (head != null) {
            stack.push(head);
            head = head.next;
        }
        int size = stack.size();
        int[] print = new int[size];
        for (int i = 0; i < size; ++i) {
            print[i] = stack.pop().val;
        }

        return print;
    }
}

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        this.val = x;
    }
}

C++


Python


总结

int[]、Integer[]、List 之间的转换:

        // int[] -> Integer[] 
        Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);
        // int[] -> List<Integer>
        List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());

        // Integer[] -> int[]
        int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray();
        // Integer[] -> List<Integer>
         List<Integer> list2 = Arrays.asList(integers1);

        // List<Integer> -> int[]
        int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();
        // List<Integer> -> Integer[]
        Integer[] integers2 = list1.toArray(new Integer[0]);

【剑指 Offer】06.从尾到头打印链表

标签:next   方法   list()   sys   数组   ati   nod   链表   cpp   

原文地址:https://www.cnblogs.com/parzulpan/p/14214231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!