链表中倒数第k个结点

题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:

struct ListNode
{
      int       m_nKey;
      ListNode* m_pNext;
};

题目不难,能快速想到解决的方法就是定义两个指针,第一个比第二个快k-1个节点。这样,当第一个到达尾节点时,第二个刚好停留在倒数第k个节点上。

实现起来的话,就是先让第一个先next k-1个,然后两个再同步next。OK

ListNode* PrintNext_K(ListNode* L,int k){
   if(!L||k<0)
       return ;
   int i = 0;
   ListNode* p1 = L;
   ListNode* p2 = L;
   while((i < k)&& p1)
      p1 = p1->next;
   if(!p1)
      return ;
   while(p1){
      p1 = p1->next;
      p2 = p2->next;
   }
   return p2;
}
原文地址:https://www.cnblogs.com/idealing/p/3477528.html