Ex22 链表中倒数第k个节点
题目描述
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
解题思路
这是快慢双指针的一个典型案例。解题步骤如下:
- 让快指针(prev)先走k步;
- 让慢指针(post)和快指针一起走,当快指针走到头的时候,慢指针也就是倒数第k个节点了。
代码
struct ListNode *
getKthFromEnd (struct ListNode *head, int k)
{
if (!head || k <= 0)
return head;
struct ListNode *prev = head, *post = head;
int i = 0;
while (i < k)
{
prev = prev->next;
++i;
if (!prev)
return head;
}
while (prev)
{
prev = prev->next;
post = post->next;
}
return post;
}
结果
执行结果:通过
执行用时:4 ms, 在所有 C 提交中击败了51.44%的用户
内存消耗:5.8 MB, 在所有 C 提交中击败了13.09%的用户