NC69:链表中倒数第k个结点

链表中倒数第k个结点

http://www.nowcoder.com/questionTerminal/529d3ae5a407492994ad2a246518148a

解法1:快慢指针
① 设链表长度为n,定义两个指针a、b都指向头结点,当a指针指向最后一个结点时,a的下标是n-1
② 倒数第k个结点的下标是n-k,两者相差k-1个距离。所以让a指针先遍历向前走k-1步,此时a与b也相差k-1了,符合。
③ 然后让它们一起向前走即可。

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if(head==null || k<1){
            return null;
        }
        ListNode fast=head,slow=head;

        for (int i = 0; i < k - 1; i++){
            if(fast.next!=null){
                fast=fast.next;
            }
            else
                return null;
        }

        while(fast.next!=null){
            fast=fast.next;
            slow=slow.next;
        }
        return slow;
    }
}

解法2:普通解法
很显然,求倒数第k个,可以转换成求正数第多少个呢?

名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论

相关推荐

09-18 20:41
门头沟学院 Java
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务