双指针解决链表倒数问题

链表中倒数第k个结点

http://www.nowcoder.com/questionTerminal/886370fe658f41b498d40fb34ae76ff9

这道题用双指针即可,倒数第k个,其实就是正数n-k+1个。先让快指针走k步,然后slow从head出发,跟fast一步一步走,当fast走到尾(空节点)时,slow的位置正在n-k+1。
但是还得注意一些极值情况,比如链表为空或者k大于链表节点时。
上代码:

    public ListNode FindKthToTail (ListNode pHead, int k) {
        //处理链表为空的情况
        if(pHead == null)
            return null;
        ListNode fast = pHead;
        ListNode slow = pHead;
        //可能会有k大于链表节点的情况,所以多加个fast != null的判断
        while(fast != null && k-- > 0){
            fast = fast.next;
        }
        if(k > 0){
            return null;
        }
        while(fast != null){
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
字节算法题解 文章被收录于专栏

最近在刷字节的题库!! 春招给我冲!!!

全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
17 1 评论
分享
牛客网
牛客企业服务