hello大家好我是Django,今天给大家分享的算法是 《从尾到头打印链表》、《返回倒数第 k 个节点》
从尾到头打印链表
要求
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
思路
- 从尾部到头部的的遍历我们可以采用,深度优先的便利方式
- 使用递归的形式进行深度便利
实现
/**
* @param {ListNode} head
* @return {number[]}
*/
var reversePrint = function(head) {
const arr = [];
function pushVal(node) {
if(!node) return;
pushVal(node.next)
arr.push(node.val)
}
pushVal(head);
return arr
};
返回倒数第 k 个节点
要求
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:
给定的 k 保证是有效的。
思路
循环链表,从最后一个开始计数。当找到倒数第k个时记录该值
实现
/**
* @param {ListNode} head
* @param {number} k
* @return {number}
*/
var kthToLast = function(head, k) {
let findVal;
function findLastKVal(node) {
if(!node) return 0;
const count = findLastKVal(node.next) + 1;
if(count === k) {
findVal = node.val
}
return count;
}
findLastKVal(head)
return findVal
};