这道题十分简单,用两个指针分别指向链表头部,fast 指针先走 k 步,然后 fast 和 slow 指针一起向前走,直到 fast 指针指向 NULL,slow 指针指向的元素就是倒数第 k 个节点。
不过需要注意的是可能 k 给的会有问题(比如大于链表的长度),所以要在 fast 指针先走 k 步的时候判断是否存在异常的情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL) return NULL; ListNode* pSlow=pListHead; ListNode* pFast=pListHead; for(int i=0;i<k;i++){ if(pFast==NULL) return NULL; pFast=pFast->next; } while(pFast!=NULL){ pSlow=pSlow->next; pFast=pFast->next; } return pSlow; } };
|