14 链表中倒数第k个结点

定义两个指针start和end,让start先走k步(在走的过程中,需要判断start是否指向NULL,指向的话说明链表长度小于k,直接返回NULL),然后再判断当前start是否指向NULL,指向的话说明量表长度等于k,直接返回end,否则令它们同时往后移动,当start到达链表末尾时,end所指即为链表中倒数第k个结点。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        ListNode* start = pListHead;
        ListNode* end = pListHead;
        if(k == 0) return NULL;
        while(k != 0 and start!= NULL){
            start = start->next;
            --k;
        }
        if(k > 0) return NULL;

        while(start != NULL){
            start = start->next;
            end = end->next;
        }
        return end;

    }
};

猜你喜欢

转载自blog.csdn.net/PartyPartyAnimal/article/details/79654370