5. 从尾到头打印链表

5. 从尾到头打印链表

题目描述

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

解题思路

解法1:顺序遍历

最简单的方法就是对链表进行顺序遍历,需要借助JavaScript数组的几个内置的方法

  • Array.reverse()

顺序遍历,将值放到数组中,对数组进行翻转

function printListFromTailToHead(head)
{
    // write code here
    var res = [];
    while(head != null){
        res.push(head.val);
        head = head.next;
    }
    return res.reverse();
}
  • Array.unshift

unshift 是在数组头部插入元素,与 push 正好相反

function printListFromTailToHead(head)
{
    // write code here
    var res = [];
    while(head != null){
        res.unshift(head.val);
        head = head.next;
    }
    return res;
}

解法2:反转节点的指针

解法3:递归

  • 每次都将对上一次返回的数组进行push操作,插入当前元素
  • 终止点返回的数组为[],从后向前插入元素
//.js
function printListFromTailToHead(head)
{
    // write code here
    var res = [];
    if (head != null){
        res = printListFromTailToHead(head.next);
        res.push(head.val);
    }
    return res;
}

注意 Java 中使用 ArrayList.add(),不是 push

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        if (listNode != null){
            arrayList = printListFromTailToHead(listNode.next);
            arrayList.add(listNode.val);
        }
        return arrayList;
    }
}
发布了241 篇原创文章 · 获赞 14 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_29150765/article/details/102504664