请写一个单链表查找倒数第k个节点
在前端开发中,你可能不会经常处理链表数据结构,但了解如何实现这样的算法是很有用的。以下是一个JavaScript函数,它接受一个单链表的头节点和一个整数k,然后返回链表中倒数第k个节点。
首先,我们需要定义链表节点的数据结构:
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
然后,我们可以使用双指针技巧来找到倒数第k个节点:
function findKthFromEnd(head, k) {
// 初始化两个指针,都指向头节点
let fast = head;
let slow = head;
// 先让快指针向前移动k步
for (let i = 0; i < k; i++) {
if (fast === null) {
// 如果k大于链表长度,直接返回null
return null;
}
fast = fast.next;
}
// 然后,快慢指针同时移动,直到快指针到达链表尾部
while (fast !== null) {
fast = fast.next;
slow = slow.next;
}
// 当快指针到达链表尾部时,慢指针就指向了倒数第k个节点
return slow;
}
你可以使用以下代码测试这个函数:
// 创建一个简单的链表:1 -> 2 -> 3 -> 4 -> 5
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
let k = 2; // 查找倒数第2个节点
let result = findKthFromEnd(head, k);
console.log(result.val); // 输出:4
浙公网安备 33010602011771号