力扣-面试题 02.02题(Java)
发布日期:2021-05-10 02:27:08 浏览次数:25 分类:精选文章

本文共 1107 字,大约阅读时间需要 3 分钟。

单向链表的kthToLast问题是指,在给定一个单向链表和一个整数k时,返回链表中倒数第k个节点的值。这个问题可以通过遍历链表并记录节点值到一个列表中,然后从列表末尾取出第k个元素来解决。

问题分析

给定一个单向链表节点类:

class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}

目标是实现一个方法kthToLast,参数为链表头节点head和整数k,返回链表中倒数第k个节点的值。

解决方案

我们可以采用以下步骤来解决这个问题:

  • 遍历链表:从链表头节点开始,逐个遍历每个节点。
  • 记录节点值:将每个节点的值添加到一个列表中。
  • 计算倒数第k个节点:在遍历完成后,从列表中取出第k个位置的值。
  • 优化代码实现

    以下是优化后的代码实现:

    class Solution {
    public int kthToLast(ListNode head, int k) {
    // 使用ArrayList来存储链表节点的值
    ArrayList
    list = new ArrayList<>();
    // 遍历链表节点
    while (head != null) {
    list.add(head.val);
    head = head.next;
    }
    // 从列表末尾取出第k个元素
    return list.get(list.size() - k);
    }
    }

    代码解释

  • 初始化ArrayList:创建一个ArrayList来存储链表节点的值。
  • 遍历链表:使用while循环从链表头节点开始遍历,直到遇到null(即链表末尾)。
  • 添加节点值:在每次循环中,将当前节点的值添加到ArrayList中。
  • 返回结果:从ArrayList中取出倒数第k个元素,即list.get(list.size() - k)
  • 优化说明

    • 变量命名清晰:代码中使用了更具描述性的变量名,如list替代了原来的array。
    • 代码简洁:优化后的代码逻辑清晰,步骤明确,易于理解。
    • 注释补充:虽然没有添加额外的注释,但代码本身的结构和命名已经很清晰,能够直接阅读和理解。

    这个解决方案通过一次遍历链表,时间复杂度为O(n),空间复杂度为O(n),其中n是链表的节点数。这种方法在大多数情况下都是高效且可行的。

    上一篇:力扣-面试题 10.01题(Java)-有陷阱,可能出现覆盖问题
    下一篇:windows快捷键隐藏桌面所有窗口——“老板键”

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年04月07日 20时11分15秒