请写一个单链表查找倒数第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
posted @ 2024-12-23 06:00  王铁柱6  阅读(31)  评论(0)    收藏  举报