剑指offer JZ14 链表中倒数第k个结点

题目链接:

JZ14 链表中倒数第k个结点

本题思路:
import java.util.*;

/*
 * 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) {
        // 快慢指针
        ListNode fast = pHead, slow = pHead;
        // 1.先让快指针走k步
        int i = 0, j = k; // 判断k是否合法
        while(fast != null && k > 0) {
            fast = fast.next;
            k--;
            i++;
        }
        // 若链表长度为5 而k为6 
        // k超出链表长度:fast为空时i=5 != k=6 return null
        // k < 0 :i=0 != k<0 return null
        if(i != j) return null;
        
        // 2.然后两个指针同步走
        while(fast != null) {
            fast = fast.next;
            slow = slow.next;
        }
        // 当快指针走到头时 慢指针就是链表倒数第k个节点
        return slow;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值