题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
let arr = [];
let count = 0;
while ((line = await readline())) {
arr.push(line);
count++;
if (count % 3 == 0) {
printVal(arr[1], Number(arr[0]), Number(arr[2]));
arr = [];
count = 0;
}
}
})();
var printVal = function (valsStr ,n , k) {
// 如果跳过链表的方式去实现非常简答,但是不符合题目要求
// let valsArr = valsStr.split(' ');
// console.log(valsArr[valsArr.length - k]);
// return;
//1、生成链表
let arr = valsStr.split(" ");
let nodeHead;
// 先创建尾部节点,并当做链表第一项
nodeHead = new ListNode(arr[arr.length - 1], null);
// 创建链表其余部分
for (let i = arr.length - 2; i >= 0; i--) {
nodeHead = new ListNode(arr[i], nodeHead);
}
//2、计算出我们要输出的节点在链表的哪一项,此时第一项记作0 (0 = 8 - 8)
let count = n - k;
let node = nodeHead;
while(count > 0) {
node = node.next;
count--;
}
console.log(node.data);
};
//链表结构
class ListNode {
constructor(key, next) {
this.data = key;
this.next = next;
}
}
#链表#