1.剑指 Offer 17. 打印从1到最大的n位数
直接计算10^n就行
var printNumbers = function(n) {
let res = []
for(let i=1;i<Math.pow(10,n);i++) {
res.push(i)
}
return res
};
2.剑指 Offer 18. 删除链表的节点
一般为了减少头结点带来的麻烦,先建一个空的头结点,然后进行遍历,遇到val就把该节点删除
var deleteNode = function(head, val) {
let pre = new ListNode(-1)
pre.next = head
let temp = pre
while(pre.next) {
if(pre.next.val === val) {
pre.next = pre.next.next
break
} else{
pre = pre.next
}
}
return temp.next
};
3.剑指 Offer 19. 正则表达式匹配
这道题目前还有些问题,之后配合写正则表达式博客时一起写
4.剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
双指针,左边一个右边一个,左边只指向奇数,右边只指向偶数,如果有遇到不符合的,就把两指针的值互换
var exchange = function(nums) {
let left = 0
let right = nums.length-1
while(right>left) {
if(nums[left]%2 !== 0) {
left++
continue
}
if(nums[right]%2 === 0) {
right--
continue
}
[nums[left], nums[right]] = [nums[right], nums[left]]
}
return nums
};
5.剑指 Offer 22. 链表中倒数第k个节点
第一次先遍历看链表中共有多少节点,然后再遍历一次,把倒数第k个节点删除
var getKthFromEnd = function(head, k) {
if(!head) return null
let cnt = 1
let temp = head
while(temp.next) {
temp = temp.next
cnt++
}
temp = head
for(let i = 0; i<cnt-k;i++) {
temp = temp.next
}
return temp
};
6.剑指 Offer 24. 反转链表
反转链表已经很熟悉了,建立一个空节点pre,当前节点设为cur,为了保留下一个节点,next=cur.next 之后每次把链表指向pre就行
var reverseList = function(head) {
let prev = null
let cur =head
while(cur) {
let next = cur.next
cur.next = prev
prev = cur
cur = next
}
return prev
};