牛客_链表中倒数第K个结点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangvalue/article/details/87894675

题目描述

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

思路:

由于在考虑到链表只告诉了头结点,是单链表在求倒数第k个链表,只能顺着链表向后移动

考虑使用两个指针firstNode,secondNode都是指向第一个结点

首先是firstNode从第一个结点开始向后移动到第k个位置,那么剩下(链表总长度-k)个结点

此时firstNode、和secondNode同时开始移动直到firstNode移动到链表末端的时候,secodeNode的位置就是倒数第k个位置

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        //如果输入的链表为null,空,或者k小于等于0
        if(head==null||k<=0){
            return null;
        }
        ListNode  firstNode = head,secondNode = head;
        //firstNode向链表第k个位置,其中链表是按照从j=1的位置来进行
        for(int j=1;j<k;j++){
            if(firstNode.next!=null){
                firstNode=firstNode.next;
            }else{
                return null;
            }
        }
        //此时firstNode接着向链表后续移动,直到最终移到链表末尾,此时secondNode的位置就是倒数第k个位置
        while(firstNode.next!=null){
            firstNode=firstNode.next;
            secondNode = secondNode.next;
        }
        return secondNode;
    }
}

猜你喜欢

转载自blog.csdn.net/zhangvalue/article/details/87894675