关阿姨带你横扫LeetCode系列之链表中倒数第k个节点|Java 刷题打卡

236 阅读2分钟

关阿姨正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接

首先跟大家阐明一点就是,每道算法题都有多种解法,我们只讲LeetCode上几种优秀的解题思路~,希望

可以帮助到大家,那我们先来看下题目描述吧~

一、题目描述:

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

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

二、思路分析:

看到这个题,一下子就想到要是知道链表的长度,那就好判断哪个是第k个节点了啊,然后遍历输出就好了不是。但是我们知道,链表的长度需要我们先遍历整个链表,获得链表长度,然后在遍历链表到k,就可以输出啦;但是这个需要遍历整个链表是不是有点麻烦,那还有不需要遍历整个链表的方法吗?那就是用双指针啦,定义两个指针名叫前后指针,同时指向头节点,然后让前指针先走k步,此时,前后指针便遥遥相隔k的距离;这时再让前后指针共同向前走,那当前指针走完之后,后指针指向的便是第k个节点啦~ 上代码看看

三、代码演示

public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode former = head, latter = head;
        for(int i = 0; i < k; i++){
            former = former.next;
        }
        while(former != null) {
            former = former.next;
            latter = latter.next;
        }
        return latter;
    }

刷题总结

如果大家还有其他解题思路,只要能实现要求,都是没问题的,条条大路通罗马,不要仅仅局限于我讲的这种解法哈~,优秀的思路和代码更具备学习意义,我们一起加油吧