<剑指offer> 第12题

题目:

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

从1开始技术,即链表的尾节点为倒数第1个节点

思路:

倒数第1个节点和倒数第k个节点相距k - 1个节点,设定两个指针,让第1个指针先走k-1步,第2个指针再同时移动,当第1个指针走到了末尾,则第2个指针走到了倒数第k个节点

代码实现:

public class Twelfth {
    class Node{
        Node next;
        int val;
    }
    
    public static Node findNode(Node head, int k){
        if(head == null || k < 1){
            return null;
        }
        Node pointer1 = head;
        Node pointer2 = head;
        for(int i = 1; i < k; i ++){
            if(pointer1.next != null){
                pointer1 = pointer1.next;
            }else {
                //已经没有节点了,说明i没有到大k-1,说明k太大,链表中没有那么多元素
                return null;
            }
        }
        while(pointer1.next != null){
            pointer1 = pointer1.next;
            pointer2 = pointer2.next;
        }
        return pointer2;
    }
}
原文地址:https://www.cnblogs.com/HarSong13/p/11327454.html