题解 | #链表中倒数最后k个结点#TOP8

思路: 利用快节点,先从头节点 偏移 k 个位置,fast指向了第 k+1 个节点,slow指向了头节点。 如果第k+1个节点是空的,那么就返回头节点 否则,不断遍历循环,知道 fast指向空节点,slow就指向了倒数k个位置,因为slow -> fast 中间有k - 1 个节点


/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pHead ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode FindKthToTail (ListNode pHead, int k) {
        // write code here
        if(pHead == null){
            return null;
        }

        if(k == 0){
            return null;
        }

        ListNode fast = pHead;
        while(k > 0){
            k --;
            fast = fast.next;
            if(k == 0 && fast  == null){
                return pHead;
            }
            if(fast == null){
                return null;
            }
        }
        ListNode slow = pHead;
        while(fast != null){
            slow = slow.next;
            fast = fast.next;
        }
        
        return slow;
    }
}
面试必刷TOP101 文章被收录于专栏

面试必刷TOP101

全部评论

相关推荐

在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务