javascript数据结构队列、链表和集合的学习
- leetcode 933. 最近的请求次数
var RecentCounter = function() {
this.p=[];
};
/**
* @param {number} t
* @return {number}
*/
RecentCounter.prototype.ping = function(t) {
this.p.push(t);
while(this.p[0] < t - 3000){
this.p.shift();
//shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
}
return this.p.length;
};
/**
* Your RecentCounter object will be instantiated and called as such:
* var obj = new RecentCounter()
* var param_1 = obj.ping(t)
*/
- leetcode 206. 反转链表
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
let p1 = head;
let p2 = null;
while(p1){
let tem = p1.next;
p1.next = p2;
p2 = p1;
p1 = tem;
}
return p2;
};
- leetcode 83. 删除排序链表中的重复元素
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
//因为已经排好序,所以只要前后相同即重复
var deleteDuplicates = function(head) {
let p1 = head;
while(p1 && p1.next){
if(p1.val == p1.next.val){
p1.next = p1.next.next;
}else{
p1 = p1.next;
}
}
return head;
}
- leetcode 141. 环形链表
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
//一快一慢循环,相等即是环
var hasCycle = function(head) {
let p1 = head;
let p2 = head;
while(p1 && p2 && p2.next){
p1 = p1.next;
p2 = p2.next.next;
if(p1 == p2){
return true;
}
}
return false;
};
- leetcode 349. 两个数组的交集
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
//使用集合对nums1去重 (Set)
//遍历nums1,筛选出nums2也包含的值
//集合给数组去重:
//const arr = [1,1,2,2,3]
//const arr2 = [...new Set(arr)];
let arr = [...new Set(nums1)];
//方法一:
//return arr.filter(item => new Set(nums2).has(item));
//方法二:
return arr.filter(item => nums2.includes(item));
};```