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

实业有限公司网站怎么做安卓优化大师官网

实业有限公司网站怎么做,安卓优化大师官网,互联网做网站地推,wordpress中添加登陆页面1、题目描述 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k 2 输出: 4 说明: 给定的 k 保证是有效的。 2、…

1、题目描述

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

注意:本题相对原题稍作改动

示例:

输入: 1->2->3->4->5 和 k = 2
输出: 4

说明:

给定的 k 保证是有效的。

2、方法1:两次遍历

  1. 第一次遍历:计算链表的长度 len

  2. 第二次遍历:从头节点开始,移动 len - k 步,到达倒数第 k 个节点。

关键步骤
  1. 计算链表长度

    • 初始化指针 curr 指向头节点 head,计数器 len = 0

    • 遍历链表,每移动一次 currlen 加 1,直到 curr 为 null

    • 最终 len 存储的是链表的节点总数。

  2. 定位倒数第 k 个节点

    • 倒数第 k 个节点就是正数第 len - k + 1 个节点。

    • 由于链表从 head 开始编号为 1,所以只需移动 len - k 步即可到达目标节点。

    • 例如,链表 1->2->3->4->5k=2(倒数第 2 个节点是 4):

      • len = 5len - k = 3

      • 从 head 移动 3 步:1(初始)→ 2 → 3 → 4,返回 4

时间复杂度
  • O(n),其中 n 是链表的长度。

    • 第一次遍历计算长度:O(n)

    • 第二次遍历定位节点:O(n)

    • 总时间:O(2n) = O(n)

空间复杂度
  • O(1),只使用了常数级别的额外空间(curr 指针和 len 变量)。

public static ListNode kthToLast(ListNode head, int k) {ListNode curr = head;int len = 0;// 第一次遍历:计算链表长度 lenwhile (curr != null) {len++;curr = curr.next;}// 第二次遍历:移动 len - k 步for (int i = 0; i < len - k; i++) {head = head.next;}return head;  // 返回倒数第 k 个节点
}

3、方法2:快慢指针

使用快慢指针(Fast-Slow Pointer)来找到链表的倒数第 k 个节点:

  1. 初始化快慢指针fast 和 slow 都指向头节点 head

  2. 快指针先移动 k-1 步

    • 目的是让 fast 和 slow 之间相隔 k-1 个节点。

    • 这样当 fast 到达链表末尾时,slow 正好指向倒数第 k 个节点。

  3. 同步移动快慢指针

    • 同时移动 fast 和 slow,每次各移动一步,直到 fast 到达最后一个节点(fast.next == null)。

  4. 返回慢指针

    • 此时 slow 指向的就是倒数第 k 个节点。

关键点
  1. 快指针先移动 k-1 步

    • 确保 fast 和 slow 之间的间隔是 k-1

    • 例如,k=2 时,fast 先移动 1 步,指向第 2 个节点,slow 仍在第 1 个节点,两者间隔 1(即 k-1)。

  2. 同步移动的条件

    • while (fast != null && fast.next != null)

      • fast != null:避免 fast 已经越界(理论上不会发生,因为题目保证 k 有效)。

      • fast.next != null:确保 fast 可以移动到下一个节点(即 fast 不是最后一个节点)。

    • 当 fast 是最后一个节点时(fast.next == null),循环停止,此时 slow 指向倒数第 k 个节点。

时间复杂度
  • O(n),其中 n 是链表的长度。

    • 快指针最多移动 n 步(先移动 k-1 步,再同步移动 n-k 步)。

    • 慢指针移动 n-k 步。

    • 总时间:O(n)

空间复杂度
  • O(1),只使用了两个指针(fast 和 slow),没有额外空间消耗。

public static ListNode kthToLast2(ListNode head, int k) {ListNode fast = head, slow = head;// 快指针先移动 k-1 步for (int i = 0; i < k - 1; i++) {fast = fast.next;}// 同步移动快慢指针,直到快指针到达最后一个节点while (fast != null && fast.next != null) {fast = fast.next;slow = slow.next;}return slow;  // 慢指针指向倒数第 k 个节点
}

http://www.dtcms.com/wzjs/303615.html

相关文章:

  • 基于springmvc的电商网站设计与实现优化师的工作内容
  • 网站专用app关键词优化排名seo
  • 北京疫情最新消息情况今天新增百度seo点击器
  • 最新章节 第一百四十七章 做视频网站cpa广告联盟
  • 如何在家里做网站网络推广方案的内容
  • 共青团建设网站西安网站推广
  • 太原制作网站的工作室网络营销的成功案例
  • 如何做跨境购物网站怎样去推广自己的网店
  • 北京丰台做网站巩义网络推广
  • 苍溪规划和建设局网站seo 网站优化推广排名教程
  • 有没有专门做建筑造价的私单网站重庆网站排名优化教程
  • 手机网站建站系统网络营销是什么?
  • 微信小网站制作苏州网站建设制作公司
  • 桐乡 网站建设高端企业网站模板
  • 网站图片优化百度seo关键词优化
  • 用户上传商品网站用什么做经典营销案例分析
  • 云建站平台哪家好windows优化大师提供的
  • 网站搭建完手机访问一个新品牌如何推广
  • 招聘网站建设方案模板下载正规接单赚佣金的app
  • php怎么做多个网站网络推广怎么做
  • 梧州建设厅官方网站seo网站推广推荐
  • 阿里云服务器网站建设seo公司上海
  • 网站建设教程详解中国百强企业榜单
  • 政府网站建设内容规划南昌做seo的公司有哪些
  • 电子商务网站建设基本步骤bt种子磁力搜索引擎
  • 怀化市委网站网络营销知识
  • 手机版网站开发框架厦门人才网
  • 建手机网站多少钱惠州企业网站seo
  • 购物网站做推广爱站小工具
  • 青县网站制作百度推广营销页