剑指offer题解C++【14】链表中倒数第k个结点

来源:互联网 发布:人工智能四大平台 编辑:程序博客网 时间:2024/05/29 04:09

题目描述

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

解题思路

设原始链表共n个节点;
将原始链表复制到两个新链表p1和p2;
先找到p2的第k个节点;
然后p1和p2同时指向下一个节点,直到p2为nullptr,此时p1指向第n-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) {        ListNode * p1 = pListHead, *p2 = pListHead;        for (int i = 0; i != k; i++){            if (p2 == nullptr)                return nullptr;            p2 = p2->next;        }        while (p2){            p2 = p2->next;            p1 = p1->next;        }        return p1;    }};
原创粉丝点击