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

剑指 Offer 22. 链表中倒数第k个节点

剑指 Offer 22. 链表中倒数第k个节点

难度:easy\color{Green}{easy}easy


题目描述

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 666 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、61、2、3、4、5、6123456。这个链表的倒数第 333 个节点是值为 444 的节点。

示例:

给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.

算法

(直接遍历)

最简单直接的方法即为顺序查找,假设当前链表的长度为 n,则我们知道链表的倒数第 k 个节点即为正数第 n−k 个节点,此时我们只需要顺序遍历到链表的第 n−k 个节点即为倒数第 k 个节点。

我们首先求出链表的长度 n,然后顺序遍历到链表的第 n−k 个节点返回即可。

复杂度分析

  • 时间复杂度O(n)O(n)O(n),其中 nnn 是链表的长度。最坏需要遍历链表两次。

  • 空间复杂度 : O(1)O(1)O(1)

C++ 代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* getKthFromEnd(ListNode* head, int k) {int n = 0;for (auto p = head; p; p = p->next) n ++;auto dummy = new ListNode(-1);dummy->next = head;for (int i = 0; i < n - k + 1; i ++) {dummy = dummy->next;}return dummy;}
};

http://www.lryc.cn/news/20143.html

相关文章:

  • 数据结构预算法之买卖股票的最好时机(三)动态规划
  • 【数通网络交换基础梳理2】三层设备、网关、ARP表、VLAN、路由表及跨网段路由下一跳转发原理
  • Java-排序链表问题
  • c++之二叉树【进阶版】
  • 【数据库】 SQLServer
  • Linux 4.19 内核中 spinlock 概览
  • TensorFlow 1.x学习(系列二 :1):基本概念TensorFlow的基本介绍,图,会话,会话中的run(),placeholder(),常见的报错
  • javaEE 初阶 — 关于 IPv4、IPv6 协议、NAT(网络地址转换)、动态分配 IP 地址 的介绍
  • 《Qt 6 C++开发指南》简介
  • CleanMyMac是什么清理软件?及使用教程
  • Linux小黑板(9):共享内存
  • Detr源码解读(mmdetection)
  • 一个.Net Core开发的,撑起月6亿PV开源监控解决方案
  • C语言数据结构初阶(2)----顺序表
  • K8S常用命令速查手册
  • Linux系统下命令行安装MySQL5.6+详细步骤
  • 13.STM32超声波模块讲解与实战
  • 逆向之Windows PE结构
  • ACL是什么
  • 操作系统核心知识点整理--内存篇
  • 从零开始学习iftop流量监控(找出服务器耗费流量最多的ip和端口)
  • 第一篇博客------自我介绍篇
  • No suitable device found for this connection (device lo not available(网络突然出问题)
  • 【算法设计技巧】分治算法
  • 已解决kettle新建作业,点击保存抛出异常Invalid state, the Connection object is closed.
  • 【设计模式】 工厂模式介绍及C代码实现
  • 深入浅出PaddlePaddle函数——paddle.arange
  • X86 ATT常用寄存器及其操作指令
  • Kotlin 高端玩法之DSL
  • 理光M2701复印机载体初始化方法