剑指offer-链表中倒数第k个结点(C++)

1、题目描述

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

2、解题思路

使用两个指针,该两个指针间距k个节点,当后面的指针到达链表尾部时,另一个指针则指向倒数第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) {
        if (pListHead == nullptr || k == 0)
            return nullptr;
        ListNode* pHead = pListHead, * pTail = pListHead; 
        //如果链表长度大于k,pTail指针向后移动k个节点,使pHead和pTail之间相隔k个节点
        for (int i = 0 ; i < k; ++i)
        {
            if(pTail == nullptr)
            {
                return nullptr;
            }
            pTail = pTail->next;
        }
        //当pTail为空指针时,pHead指向倒数第k个节点
        while (pTail != nullptr)
        {
            pTail = pTail->next;
            pHead = pHead->next;
        }
        return pHead;
    }
};
原创文章 62 获赞 133 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43142797/article/details/104955786