剑指offer 66题 -- 输入一个链表,输出该链表中倒数第k个结点。

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
  //变量定义区
  ListNode* pNode = pListHead;
  ListNode* pPrevious = pListHead;

  //入参检查
  if(pListHead == NULL || k ==0)
    return NULL;

  //先移动k个节点
  for(unsigned int i=0; i < k-1; i++)
  {
    if(pNode->next == NULL )
      return NULL;
  
    pNode = pNode->next;
  }

  //前后节点整体移动
  while(pNode->next != NULL)
  {
    pNode = pNode->next;
    pPrevious = pPrevious->next;
  }

  return pPrevious;
}
};

 

程序已通过牛客网测试用例。

posted @ 2017-02-26 22:31  夜雨寒山  阅读(109)  评论(0编辑  收藏  举报