题目描述

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

示例
输入
{1,2,3,4,5},1
返回值
{5}

题解

遍历两遍:计算链表长度+定位。
遍历+栈:进栈+出栈k个。
双指针:一先一后,先者先走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) {
        // 边界
        if(k<1||pHead==null){
            return null;
        }

    // 先者先走k步,并判断边界
        ListNode first=pHead;
        ListNode second=pHead;
        while(k>0&&first!=null){
            --k;
            first=first.next;
        }
    // 链表长度不够
        if(k>0){
            return null;
        }
        // 两个指针一起走,先者到达终点,后者即为目标
        while(first!=null){
            first=first.next;
            second=second.next;
        }
        return second;
    }
}