之前一直知道JS有比较好的面向对象的写法,今天通过一道算法题来尝试了一下
首先就是JS相对Java来说少了直接创建类的概念,所以说面向对象的写法会比较困难,这里是通过实现了一个栈对象来实现了数组的反转
先贴题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
然后是代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {number[]}
*/
//先通过创建Stack 所有的方法都要 在继承链中继承给对象然后通过this来调用
//所用到的变量
function Stack(){
this.items = [];
Stack.prototype.push = function(element){
this.items.push(element);//这些都是数组的方法
};
Stack.prototype.pop = function(){
return this.items.pop();
}
Stack.prototype.size = function(){
return this.items.length;
}
}
var reversePrint = function(head) {
var stack = new Stack();
let arr = [];
//每获取一个元素后,链表向后走一步
while(head){
stack.push(head.val);
head = head.next;
}
var len = stack.size();
//通过栈的后进先出的特点来实现链表的反转
for(let i=0;i < len;i++){
arr.push(stack.pop());
}
return arr;
};