「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
题目:链表中倒数第k个节点
解法一
分析:采用双指针方式,让一个指针先走 k 步,然后两个指针一起走,当 p2 指向最后一个节点时,p1 指向倒数第 k 个节点
function getKthFromEnd(head, k) {
if (!head) return null;
let p1 = head;
let p2 = head;
for (let i = 0; i < k; i++) {
p2 = p2.next;
}
while (p2) {
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
解法二
分析:先计算出总数,然后算出是正数第几个的方式
var getKthFromEnd = function (head, k) {
let cur = head;
let sum = 0;
while (cur) {
cur = cur.next;
sum++;
}
cur = head;
let val = sum - k;
while (val > 0 && cur) {
cur = cur.next;
val--;
}
return cur;
};
解法三
递归:
var getKthFromEnd = function(head, k) {
let result = null;
function helper(head, k) {
if (!head) return 0;
const total = helper(head.next, k) + 1;
if (total === k) {
result = head;
}
return total;
}
helper(head, k);
return result;
};
写在最后
本来的解答都经过了力扣的校验,文章写的有些匆忙,实现方式上有啥不足的欢迎指正,如果还有其它好的实现方式也欢迎在留言区讨论。