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

输入一个链表,输出该链表中倒数第k个结点。

思路:

两个指针

一个往前走k次,然后再判断,

总长度只有k的时候,稍微麻烦一些。

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if(pListHead==NULL)
            return NULL;
        ListNode* tmp_follow=pListHead;
        ListNode* tmp_head=pListHead;
        while(k--){
            tmp_head=tmp_head->next;
            if(tmp_head->next==NULL)
                if(k!=1)
                    return NULL;
                else
                    return tmp_follow;
        }
 
        while(tmp_head!=NULL)
        {
            tmp_head=tmp_head->next;
            tmp_follow=tmp_follow->next;
        }
        return tmp_follow;
    }
};

思路2:

走k-1次,然后判断前指针的下一个是否为null

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if(pListHead==NULL)
            return NULL;
        ListNode* tmp_follow=pListHead;
        ListNode* tmp_head=pListHead;
        int k1=k-1;
        while(k1--){
            tmp_head=tmp_head->next;           
            if(tmp_head==NULL)
                    return NULL;
        }
        /*if(tmp_head->next==NULL)
            return tmp_follow;*/
        while(tmp_head->next!=NULL)
        {
            tmp_head=tmp_head->next;
            tmp_follow=tmp_follow->next;
        }
        return tmp_follow;
    }
};

猜你喜欢

转载自blog.csdn.net/m0_37561165/article/details/81386688