JS找出单向链表中倒数第 k 个节点

142 阅读1分钟

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

示例:

输入: 1->2->3->4->5 和 k = 2
输出: 4

分析: 找出单向链表中倒数某个节点,首先想到最简单也是最暴力的解法:生成一个数组,将链表遍历的同时,存放到数组中,将数组反转,取第K个元素值。

但是这样做会开辟一个新的数组,从而产生和消耗不必要的内存。另一种想法就是:将链表反转,再找到第K个元素即可

下面分别实现:

方法一:

var kthToLast = function(head, k) {
    let indexList = []
    let p = head
    while(p) {
        indexList.push(p.val)
        p = p.next
    }
    return indexList[indexList.length - k]
};

方法二:

var kthToLast = function(head, k) {
    let pre = null
    let current = head
    while(current) {
        const next = current.next
        current.next = pre
        pre = current
        current = next
    }
    let n = 1
    let res = ''
    while(n <= k) {
        res = pre.val
        n++
        pre = pre.next
    }
    return res
}

实现过程和原理可见前面的文章: JS实现链表的反转