上篇博客已经介绍了如何求解链表的中间节点,而求链表的倒数第k个节点无疑是前一个问题的变形,因此我们仍然采用双指针来求解,不过这次可不是两个指针走的速度不一样了,而是快指针先走一段,然后快指针和慢指针再同时走
举个栗子,假如我们要求的是下面链表的倒数第2的节点
可以看到,快指针先走两步,然后快指针和慢指针一起走,当快指针为空时,慢指针就走到了倒数第2个位置
一般地,要求倒数第k个节点,快指针先走k步,然后快慢指针一起走,当快指针走到尾时(快指针走了n-k步,慢指针也就走了n-k步),慢指针就走到了目标节点
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k) {
struct ListNode* fast = pListHead;
struct ListNode* slow = pListHead;
while (k--)
{
if (fast == NULL)
{
return NULL;
}
fast = fast->next;
}
while (fast)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}
求链表的倒数第k个节点就分享到这了,文章仍有许多不足,欢迎大家交流指正~~~