当前位置: 首页 > news >正文

剑指offer19_链表中倒数第k个节点

链表中倒数第k个节点


输入一个链表,输出该链表中倒数第 kk 个结点。

注意:

  • k >= 1;
  • 如果 kk 大于链表长度,则返回 NULL;
数据范围

链表长度 [ 0 , 30 ] [0,30] [0,30]

样例
输入:链表:1->2->3->4->5 ,k=2输出:4

方法思路

由于单链表不能直接索引到前驱节点,只能从前往后遍历。我们通过两次遍历解决问题:

  1. 第一次遍历:获取链表总长度 n
  2. 第二次遍历:计算倒数第 k 个节点的正序位置为 n - k + 1,遍历到该位置即可得到目标节点。

注意:当 k > n 时,需返回 nullptr

时间复杂度
  • O(n):链表总共遍历两次,时间复杂度为线性。
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* findKthToTail(ListNode* pListHead, int k) {int n = 0;for(auto p  = pListHead; p; p = p->next) n ++;if(k > n) return nullptr;auto p = pListHead;for(int i = 0; i < n - k; i ++) p = p->next;return p;}
};

假设链表为 1 -> 2 -> 3 -> 4 -> 5,求倒数第 2 个节点:

  1. 第一次遍历n = 5
  2. 计算位置n - k + 1 = 5 - 2 + 1 = 4
  3. 第二次遍历:移动到第 4 个节点(值为 4),返回结果。
边界条件
  • k <= 0k > n 时返回 nullptr
  • 空链表直接返回 nullptr

相关文章:

  • Netty集群搭建
  • python打卡day48
  • PandasAI使用
  • 深入解析 Pandas 核心数据结构:Series 与 DataFrame
  • 重读《人件》Peopleware -(15)Ⅱ 办公环境 Ⅷ 撑伞之步:构建理想办公环境(下)
  • 【C++系列】智能指针自定义析构
  • 6.5 自学测试 数据库基础 Day5
  • C++11 右值引用
  • 第十八章 归档与备份
  • python打卡训练营打卡记录day48
  • JS的数据类型分类
  • 自动交换两个文件的文件名 VSB脚本技巧 电脑技巧
  • java面试:JAVA并发篇
  • 《双指针》题集
  • Codeforces Educational 179(ABCDE)
  • 聊聊集群间数据复制和持久化机制
  • 联邦学习与边缘计算结合
  • Ubuntu 上安装 Git LFS
  • 算法打卡17天(补)
  • Docker知识五:服务编排(Docker Compose概念)
  • 奉化云优化seo/seo公司的选上海百首网络
  • 一个小网站一般多少钱/百度热搜榜
  • 82端口做网站/个人网上卖货的平台
  • 网站开发人员岗位/哈尔滨网站建设
  • html网站开发心得体会/市场营销手段13种手段
  • 河南省城乡住房建设厅网站首页/小型培训机构管理系统