剑指JZ14_链表中倒数第K个节点

题目描述:

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

题目链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

解题思路:快慢指针

快指针先走K步,之后两个指针同时前进,当快指针走出尾结点后,慢指针距离尾结点的距离为K-1,即是倒数第K个节点

public ListNode FindKthToTail(ListNode head, int k) {
        ListNode quick = head;
        ListNode slow = head;

        //考虑特殊情况:1.head为null 2.K = 0 3. k 大于链表长度
        if (head == null || k == 0){
            return null;
        }

        //快指针先走k步
        for (int i = 0;i<k;i++){
            if (quick == null){
                return null;
            }
            quick = quick.next;
        }
        //然后两个指针同时前进
        while (quick!=null){
            quick = quick.next;
            slow = slow.next;
        }
        //当快指针走过尾结点,此时慢指针就是倒数第k个数
        return slow;
    }

 

posted @ 2020-07-19 19:36  硬盘红了  阅读(122)  评论(0编辑  收藏  举报