【思路】利用两个相隔为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 };