/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pHead ListNode类 * @param k int整型 * @return ListNode类 */ ListNode* FindKthToTail(ListNode* pHead, int k) { ListNode* p=pHead; ListNode* pre=p; for(int i=0;i<k;i++) { if(p==nullptr)return nullptr;//如果正数都没有第k个,倒数更不会有 p=p->next; } while(p!=nullptr) { p=p->next; pre=pre->next; } return pre; } };
这道题目是双指针的运用,只需要将一个指针移动到正数第k个节点后,再将两个指针一起移动,直到后面那个指针指向了链表的末尾位置(nullptr)时,前面那个指针指向的就是倒数第k个节点。