剑指Offer——链表中倒数第k个结点
链表中倒数第k个结点
https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9?tpId=13&tqId=11167&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey
题目描述
输入一个链表,输出该链表中倒数第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; } }