1. 先走k步(思路来自王道真题)

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* findKthToTail(ListNode* pListHead, int k) {
  12. ListNode *first = pListHead;
  13. ListNode *last = pListHead;
  14. while(k--){
  15. if(!first) return NULL;
  16. first = first->next;
  17. }
  18. while(first){
  19. first = first->next;
  20. last = last->next;
  21. }
  22. return last;
  23. }
  24. };

2. 容易想到的方法

class Solution {
public:
    ListNode* findKthToTail(ListNode* pListHead, int k) {
        int len = 0;
        ListNode *cur = pListHead;
        while(cur){
             len++;
             cur = cur->next;
        }
        if(k > len) return 0;
        for(int i = 1; i < len - k + 1; i ++){
            pListHead = pListHead->next;
        }
        // cout << pListHead->val;
        return pListHead;
    }
};