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

链表中倒数最后k个结点

https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9

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) {
        // write code here
        // 思路:双指针来解决
        // 定义两个指针,p1先走k-1个节点,然后p1和p2再一起出发,p1走到头,p2的位置就是
        // 因为p1先走了k-1,那么p2就还剩下k-1个点没走
        ListNode fast = pHead , slow = pHead;
        
        while(k>0){
            if(fast == null){
                return fast;
            }
            fast = fast.next;
            k--;
        }
        while(fast!= null ){
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
       
        /*
        if(k <= 0){
            return null;
        }
        while(k >1){
            if(fast == null){
                return null;
            }
            fast = fast.next;
            k--;
        }
        if(fast == null ){
            return null;
        }
        while(fast.next != null){
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
        */
    }
}

这个题目其实很简单,但我在边界处纠结了好久。

一开始我是判断k >1,才挪动,也就是挪动 k -1步,当刚好fast指向最后一个的时候,slow的值就是,但这也有很多小细节要注意。k<=0的判断,得单独加上,不然输出结果不是null。但是k > 0 的判断就不用,它是fast走完了最后一个,此时fast为null,如果一样,那么slow也是null。

并且,在实行完k>1的时候,刚好k等于1的时候,fast指向null,此时是因为k=1跳出循环,再执行next会报错。所以应该又加上一个判断。

最后确定直接用k>0的方法。一开始移动k步,这样,slow就要多一步,也就是fast走完了,此时fast为null。

全部评论

相关推荐

01-24 08:13
已编辑
合肥工业大学 Java
程序员牛肉:没啥问题。标准的流水线简历,但是学历好一点,所以应该是有约面的机会的。 这段时间可以考虑把自己的两个项目彻底的理一理。争取能够讲清楚每一个功能点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务