剑指Offer 链表中倒数第k个结点

代码的完整性

两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        ListNode* p1 = pListHead, *p2 = pListHead;
        for (int i = 0; i < k-1; i++)
        {
            if (p1 == NULL)
            {
                cout << "k > len(List)" << endl;
                return NULL;
            }
            p1 = p1->next;
        }
        if (p1 == NULL) return NULL;
        while (p1->next != NULL)
        {
            p1 = p1->next;
            p2 = p2->next;
        }
        return p2;
    }
};

  

posted @ 2019-04-30 13:20  Lorazepam  阅读(85)  评论(0)    收藏  举报