最强解析面试题:链表中倒数第 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 个节点「建议收藏!」的主要内容,如果未能解决你的问题,请参考以下文章