题来自leetcode《剑指offer》
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
摘要:我们js是没有链表这种数据结构的,需要自己封装。简单说一下,链表以节点为单位,每个元素都是一个独立对象,在内存空间的存储是非连续的。链表的节点对象具有两个成员变量:「值 val」,「后继节点引用 next」 。链表属性有head、length,一个指向头节点,一个表示链表节点的个数;
这是题目给的节点类:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
然后是“从尾到头”“数组返回”大家想到了什么?
我第一反应是arr.reverse();
那么解法就有思路了:
创建一个数组,对输入的head进行判断,存在就将head.val压入数组,并把head.next赋值给head;反转数组,返回数组;
完整代码:
var reversePrint = function(head) {
var arr = [];
while(head) {
arr.push(head.val);
head = head.next;
}
arr.reverse();
return arr;
};
也可以用个辅助栈,毕竟先进后出嘛,再放入数组就是了,这里就不放代码了,毕竟咋也是用数组来充当栈嘛,哈哈哈哈。