前言
以专题的形式更新刷题贴,欢迎跟我一起学习刷题。每道题会提供简单的解答。
【题目描述】
在单链表中删除顺数、倒数第 K 个结点。
【要求】
如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1)
【难度】
士:★☆☆☆
解答
删除倒数第K个结点的时候会出现三种情况:
1、不存在倒数第 K 个结点,此时不用删除。
2、倒数第 K 个结点就是第一个结点。
3、倒数第 K 个结点在第一个结点之后。
所以我们可以用一个变量 length记录链表一共有多少个结点。
如果 length< K,则属于第一种情况。
如果 length== K,则属于第二种情况。
如果 length> K, 则属于第三种情况,此时删除倒数第 K 个结点等价于删除第 (length- k + 1) 个结点。
删除顺数第K个代码如下:
1 | //删除单链表中的第K个结点 |
删除倒数第K个代码如下:
1 | //删除倒数第K个结点 |
测试代码
1 | public static void main(String[] args) { |