题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路
方法一:
- 倒数第 k 个结点,就是正数第 n-k+1 个。
- 若设置一个快指针先行遍历到链表的最后,那么倒数第 k 个结点与最后一个结点的距离相差 n - (n-k+1) = k - 1
- 所以,可以让快指针线性走 k-1 步,此时,设置一个慢指针与快指针同时前进;当快指针走到最后,慢指针刚好走 k-1 步,即倒数第 k 个结点。
代码
public class Solution {
public ListNode FindKthToTail(ListNode head, int k) {
if (head == null || k <= 0)
return null;
ListNode slow = head;
ListNode fast = head;
for (int i = 0; i <k - 1; i++) {
if (fast.next != null) {
fast = fast.next;
} else {
return null;
}
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
文章汇总见这里 >>剑指Offer汇总<<
更多精彩文章见这里 >>我的学习小站<< & 更多好玩见这里 >>技术杂谈<<