[剑指Offer] 14.链表中倒数第k个结点

【思路】利用两个相隔为k-1个结点的指针进行遍历,当后一个指针移到末尾时,前一个指针就是要求的结点。

 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6             val(x), next(NULL) {
 7     }
 8 };*/
 9 class Solution {
10 public:
11     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
12         if(pListHead == NULL || k == 0)
13             return NULL;
14         
15         ListNode* p = pListHead;
16         ListNode* q = pListHead;
17         
18         for(int i = 0;i < k - 1;i ++){
19             if(q->next != NULL)
20                 q = q->next;
21             else
22                 return NULL;
23         }
24         
25         while(q->next != NULL){
26             q = q->next;
27             p = p->next;
28         }
29         return p;
30     }
31 };

 

posted @ 2017-02-27 16:02  Strawberry丶  阅读(152)  评论(0编辑  收藏  举报