链表
反转链表

输入: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.nextcurr.next = prevprev = currcurr = 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 = 5console.log(twoSum(nums, target))</script>
