Skip to the content.

Ex22 链表中倒数第k个节点

题目描述

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

解题思路

这是快慢双指针的一个典型案例。解题步骤如下:

代码

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%的用户