leetcode之从头到尾打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
输入:head = [1,3,2]
输出:[2,3,1]
  • 说实话,这个题目还是比较简单的,但是我个人感觉其实还是有点小技巧在里面,看到官方题解以及许多大佬们的解法都是使用了栈或者递归。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
        //利用栈的先进后出特性
        Stack<Integer> stack = new Stack();
        //记录链表的长度
        int len = 0;
        while(head != null){
            stack.push(head.val);
            len++;
            head = head.next;
        }
        int[] arr = new int[len];
        for(int i=0;i<len;i++){
            arr[i] = stack.pop();
        }
        return arr;
    }
}
  • 但是这里我的解法是,先遍历整个链表,获取到链表的长度,然后再创建数组,从数组的最后一位开始赋值;
class Solution {
    public int[] reversePrint(ListNode head) {
        ListNode node = head;
        int len = 0;
        while(node != null){
            len++;
            node = node.next;
        }
        int[] arr = new int[len];
        //这边从数组的最后一位开始赋值,也算是一种常规的方法吧
        for(int i=len-1;i>=0;i--){
            arr[i] = head.val;
            head = head.next;
        }
        return arr;
    }
}

猜你喜欢

转载自blog.csdn.net/harryshumxu/article/details/105265136