链表
反转链表
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
方法一:迭代
在遍历链表时,将当前节点的 next 指针改为指向前一个节点,由于节点没有应用其前一个节点,因此必须事先存储其前一个节点,在更改引用之前,还需要存储后一个节点,最后返回新的头引用。
var reverseList = function(head){
let prev = null;
let curr = head;
while(curr){
const next = curr.next
curr.next = prev
prev = curr
curr = next
}
return prev
}
复杂度分析
- 时间复杂度:O(n)O(n),其中 nn 是链表的长度。需要遍历链表一次。
- 空间复杂度:O(1)O(1)。
两数之和
<script>
/*
第一次写法:
存在问题 循环并不是根据 ,拿第一个值后,在依次匹配
所以找匹配值的方式需要变成 目标值 - 当前值
思路,先拿一个固定的值,在用后面的值跟它进行匹配
*/
var twoSum = function (nums, target) {
let obj = []
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
//注意 这边不可以用相加来判断
if (nums[j] == target - nums[i]) {
obj.push(i, j)
return obj
}
}
}
};
// var twoSum = function (nums, target) {
// let i = nums.length
// while (i > 1) {
// //pop 是会删除数组的
// let last = nums.pop()
// //在数组中没有找到与之可以相加等于目标值的情况
// if (nums.indexOf(target - last) > -1) {
// return [nums.indexOf(target - last), nums.length]
// }
// i--
// }
// }
var nums = [1, 1, 1, 1, 1, 4]
var target = 5
console.log(twoSum(nums, target))
</script>