题目来源: LeetCode 75 30 天 JavaScript 挑战
2627. 函数防抖
思路
使用定时器
代码
ts
function debounce(fn: F, t: number): F {
let timer
return function(...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn(...args)
}, t)
}
};
2721. 并行执行异步函数
思路
返回一个新的 Promise
, 顺序执行数组中的方法,发生 reject
时,外部的 Promise
对象也 reject
代码
ts
function promiseAll<T>(functions: Fn<T>[]): Promise<T[]> {
return new Promise((resolve, reject) => {
const res = []
let count = 0
for(let i = 0; i < functions.length; i++) {
const fn = functions[i]
fn().then(r => {
res[i] = r
count++
if (count === functions.length) {
resolve(res)
}
}).catch(reject)
}
})
};
2095. 删除链表的中间节点
思路
快慢指针,快指针的速度是慢指针的两倍,快指针走到末位置,慢指针在中间位置,执行删除操作
代码
ts
function deleteMiddle(head: ListNode | null): ListNode | null {
if (head.next === null) {
return null
}
let tmp = new ListNode(0, head)
let slow = tmp
let fast = head
while(fast !== null && fast.next !== null) {
slow = slow.next
fast = fast.next.next
}
slow.next = slow.next.next
return head
};
328. 奇偶链表
思路
使用奇偶指针,保存第一个偶数节点,even.next
是下一个奇数结点,odd.next
是下一个偶数节点,最后链接奇偶链
代码
ts
function oddEvenList(head: ListNode | null): ListNode | null {
if (head === null) {
return head
}
let odd = head
let even = head.next
let evenhead = even
while(even !== null && even.next !== null) {
odd.next = even.next
odd = odd.next
even.next = odd.next
even = even.next
}
// 链接奇偶链表
odd.next = evenhead
return head
};
本文完,感谢阅读 🌹