剑指 Offer - 14 - 链表中倒数第k个结点

发布于 2024-09-02 15:24:50 字数 1630 浏览 9 评论 0

题目

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

解析

两种思路,一种常规思路,一种双指针。

1、常规思路

  • 先遍历一遍求出链表长度 len
  • 然后再从头开始走 len - k 个就可以到倒数 k 个结点;

代码:

public class Solution {
    //常规解法
    public ListNode FindKthToTail(ListNode head, int k) {
        ListNode cur = head;
        int len = 0;
        while (cur != null) {
            cur = cur.next;
            len++;
        }
        if (k > len)
            return null;
        cur = head;
        for (int i = 0; i < len - k; i++)
            cur = cur.next;
        return cur;
    }
}

2、双指针

  • 设置两个指针一开始都指向 head
  • 然后先让第一个指针 firstk-1 步,然后两个指针再一起走,当第二个指针 second 走到末尾( second.next = null ) 时,第一个指针 first 就刚好指向倒数第 k 个结点;
  • 具体长度关系推一下就清楚了;

代码:

public class Solution {

    public ListNode FindKthToTail(ListNode head, int k) {
        if (head == null || k == 0) //注意要特判
            return null;
        ListNode fi = head, se = head;
        for (int i = 1; i <= k - 1; i++) // first 先走 k-1 步
            fi = fi.next;
        if (fi == null) //k > len 特判
            return null;
        while (fi.next != null) { // 注意是 fi.next != null
            fi = fi.next;
            se = se.next;
        }
        return se;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

云之铃。

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文