剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
一 . 数据结构基础概念普及(线性表)。
线性表可分为顺序表与链表,它们是堆栈、队列、树、图等数据结构的实现基础。
顺序表,线性表的顺序存储结构是指:用一块地址连续的存储空间依次存储线性表中的数据元素。他在逻辑上相邻的元素在物理上也是相邻的。什么意思呢,我们可以这样想象,去食堂排队打饭,打饭的队列就是一个顺序表,加粗部分的存储空间指的是我们排队所占据的位置;红色字体所说的概念可以理解为我们打饭的顺序必须要按照从前往后的顺序依次进行,即逻辑顺序=物理顺序,如果此处不好理解,看完下面就好懂了许多。
链表,相比顺序表需要预先占用一块事先分配好的存储空间,链表就灵活一些。链表中逻辑上相邻的元素在物理上可以不相邻。从这里可以看出,链表和顺序表是在相邻元素之间存在差异的,这段红字怎么理解呢,举个例子:我们去银行办理业务,银行都是有取号机的,我们办理业务的顺序并不是顺序表那样的物理顺序,而是依据你手上的号码顺序进行办理,所以呢,我们就不需要排队,在办事大厅随便坐,当号码轮到我们的时候,就可以办理了,这就实现了逻辑相邻但物理顺序不相邻。
回归题目,在链表中,链表是由N个节点链接而成的线性表,每个节点由两部分组成:数据域和指针域。如果其中每个节点只包含一个指针域那么就称为单链表,如果含有两个指针域那么就称为双链表。结合右上图来理解:数据域可以理解成我们要办理的业务(比如取多少钱),指针域可以理解成,取号机里面取出的号码。
代码实现定义一个单链表如下:
public class Node<T>
{
// 数据域
public T Item { get; set; }
// 指针域
public Node<T> Next { get; set; } public Node()
{
} public Node(T item)
{
this.Item = item;
}
}
Node类为单链表的节点,其中包括了一个数据域Item与一个指针域Next(指向后继节点的位置)。
废话又多了,再次回归题目,求链表中的倒数第K个节点,直接使用最高效的方法:即为双指针法。通俗的理解方法:我们让第一个指针先走,当走到第(K-1)个指针时,第二个指针出发,然后同步进行,这样两个指针之间的距离一直保持在(k-1),当第一个指针遍历到最后一点时,那是不是第二个刚好在倒数第K个点呢,不难吧,小学生应该也会。
二 . 代码实现
class Solution
{
public ListNode FindKthToTail(ListNode head, int k)
{
// write code here
//鲁棒判定
if(head == null || k == )
{
return null;
}
//定义前后指针数据与链表长度
ListNode a = head;
ListNode b = head;
int count = ;
//两指针K差距判定
while(a!=null)
{
count++;
a = a.next;
if((count - k)>)
{
b = b.next;
}
}
//链表长度不可等于或者小于节点k
if (count <= k)
{
return null;
}
//返回倒数第K个节点数据
return b;
}
}
但是,该题目的考点是代码的鲁棒性!!!所以,更要细心的去分析,该题目中存在三处,以下一一解决:
1. 空指针问题。解决方案:在代码中加入了判断空指针的代码。
2. 链表长度少于k。解决方案:在for循环中增加判断下一个节点是否是空指针的代码。
3. 输入的参数k为0。解决方案:在代码中加入判断参数k是否为0的代码。
剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点的更多相关文章
- (剑指Offer)面试题15:链表中倒数第k个结点
题目: 输入一个链表,输出该链表中倒数第k个结点. 例如:链表中有6个结点,从头到尾依次为1,2,3,4,5,6,则该链表的倒数第3个结点为4. 链表结点定义: struct ListNode{ in ...
- 《剑指offer》— JavaScript(14)链表中倒数第k个结点
链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点: 然后两个指针同时 ...
- 《剑指offer》面试题15—输出链表中倒数第n个结点
题目:如题,且从1开始计数. 思路:要求只遍历一遍链表:设置两个指针,一个先走n步后另一个开始同步后移,当快指针已经到链表尾时慢指针正好到要输出的结点. 注意:本题思路比较好想到,主要考察的是代码的鲁 ...
- 剑指Offer的学习笔记(C#篇)-- 序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...
- 剑指Offer的学习笔记(C#篇)-- 反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...
- 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 剑指Offer的学习笔记(C#篇)-- 和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 剑指Offer的学习笔记(C#篇)-- 数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将 num1[0], num2[0 ...
- 剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 一 . 题目分析 首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树.如下图: 所以 ...
随机推荐
- 测试drawable animation
public class DAActivity extends Activity implements OnClickListener { private ImageView iv_da_mm; pr ...
- Eclipse for PHP Developers使用笔记
1 修改字体样式:Window-->Preference-->General-->Appearance-->Basic-->text font-->edit
- Linux之make的用法讲解
在 Linux环境下使用 GNU 的 make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译.连接以至于最后的执行.不过这需要我们投入一些时间去完成一个或者多个 ...
- Contiki 2.7 Makefile 文件(四)
3.第三部分 这里我们假设TARGET为native (1) OBJECTDIR = obj_$(TARGET) LOWERCASE = -abcdefghijklmnopqrstuvwxyz UPP ...
- Linux学习之路(三)搜索命令
1.文件搜索命令locate 2.命令搜索命令whereis与which 3.字符串搜索命令grep 4.find命令与grep命令的区别 locate命令相对于find命令搜索非常快,find命令在 ...
- 51nod1671【货物运输】
开始天真的我以为这道题和运输计划是一样的套路.于是写了一发,debug后发现过了第一个点,十分开心的交了一发,结果只过了第一个点.后来发现这个并不是一样的,因为修建黑洞之后路径法变了,而运输计划没有( ...
- 2018.2.27 RF module distance test part I
Last week,we finish 20 pcs EP2 sample for RF module, Fistly,we need to test PCBA performance test ...
- COM组件宏观认识
一直搞不清楚COM到底是个什么东西,记录一些个人感想,可能很多错误的,慢慢消化. 一.宏观认识: 1.COM(组件对象模型)是一种标准,规则,要求,即即于建筑设计指标要求. 2.语言无关性,因为是建立 ...
- Python: scikit-image Blob detection
这个用例主要介绍利用三种算法对含有blob的图像进行检测,blob 或者叫斑点,就是在一幅图像上,暗背景上的亮区域,或者亮背景上的暗区域,都可以称为blob.主要利用blob与背景之间的对比度来进行检 ...
- 【Lintcode】122.Largest Rectangle in Histogram
题目: Given n non-negative integers representing the histogram's bar height where the width of each ba ...