题目链接
牛客上有特殊 case 的情况,个人觉得这种特殊情况还是要考虑到的
题目描述
解题思路
1. 双指针
个人感觉是一道想到了就很简单,想不到的话就很难的题,基本上做过一次后对这种类型的题就有思路了。
设置两个指针 fast 和 slow,令 fast 先走 k 步,然后两个指针一起走,当 fast 为 null时,slow 指针所在的节点即为倒数第 K 个节点。
这道题还需要考虑一个特殊的 case 情况:如果给定的 K 值为负值或者超过了链表的长度,那么直接返回 null 就好。
public class Solution {public ListNode FindKthToTail(ListNode head,int k) {ListNode fast = head;ListNode slow = head;while (k != 0) {// 特殊 case 判断if (fast == null) return null;fast = fast.next;k--;}while (fast != null) {fast = fast.next;slow = slow.next;}return slow;}}
- 时间复杂度:
,N 取决于链表长度。
- 空间复杂度:
