最强解析面试题:链表中倒数第 k 个节点「建议收藏!」

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:链表中倒数第 k 个节点「建议收藏!」相关的知识,希望对你有一定的参考价值。

最强解析面试题:链表中倒数第 k 个节点「建议收藏!」

文章讲解 “ 链表中倒数第 k 个节点 ” 经典面试题,包含思路及源码!

题目

输入一个链表,输出链表中倒数第 k 个节点。

思路

  • 常规思路一,找节点和位置的关系,从而输出指定位置的节点数据。

  • 常规思路二,放弃节点和位置的关系,自定义一组包含倒数 k 的关系,取指定位置数据。

编码

这里采用第二种思路,自定义一组关系,关系如下;

  • 两个索引,分为一前一后,位置关系间隔 k ,当前索引到达链表尾部,则后索引位置即目标数据。

编码如下:

package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead ListNode类 
 * @param k int整型 
 * @return ListNode类
*/
func FindKthToTail( pHead *ListNode ,  k int ) *ListNode {
    // write code here
    // 注:类型检查必要
    if pHead == nil || k <= 0 {
        return nil
    }
    // 注:声明基础类型会有默认值,无需在赋值,压缩运行耗时
    var index int
    var arm *ListNode
    // 注:声明单个节点即可,无需拷贝整个链表,压缩运行空间
    other := &ListNode{}
    other.Next = pHead
    for pHead != nil {
        index++
        pHead = pHead.Next
        if index >= k {
            arm = other.Next
            other = other.Next
        }
    }
    return arm
}

运行结果

运行时间 在 2ms 内,占用内存在 912KB 。

运行时间:2ms
超过100.00% 用Go提交的代码
占用内存:912KB
超过36.86%用Go提交的代码

Q&A

1、针对问题解法,有什么特别需要注意的地方吗?

具体位置可见代码注释。
// 注:类型检查必要
// 注:声明基础类型会有默认值,无需在赋值,压缩运行耗时
// 注:声明单个节点即可,无需拷贝整个链表,压缩运行空间

附录

保持思考,勇于接触新事物!

以上是关于最强解析面试题:链表中倒数第 k 个节点「建议收藏!」的主要内容,如果未能解决你的问题,请参考以下文章

力扣题解-面试题22. 链表中倒数第K个节点

LeetCode 面试题22. 链表中倒数第k个节点

力扣题解 面试题22. 链表中倒数第k个节点 双100%

面试题22:链表中倒数第k个节点

剑指Offer - 面试题22:链表中倒数第K个节点

《剑指offer》面试题10:链表中倒数第k个节点