题解 | #输出单向链表中倒数第k个结点#

输出单向链表中倒数第k个结点

https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

#include <iostream>
using namespace std;

struct ListNode{
    int m_nKey;
    ListNode* m_pNext;
    ListNode():m_nKey(0),m_pNext(nullptr){};
    ListNode(int x):m_nKey(x),m_pNext(nullptr){};
};

// 之前我的代码还是记住了长度 违背题意  即使能ac

ListNode* getnode(ListNode* node, int& index)
{
    if(node==nullptr)
    {
        return nullptr;
    }
    
    ListNode* head = getnode(node->m_pNext, index);// 一直往后遍历

    if(--index==0)// 回溯时 减index 直到0 就是指定位置
    {
        return node;
    }
    else
    {
        return head; // 一直是nullptr
    }
}

int main() {
    int n, a;
    while (cin >> n) { // 注意 while 处理多个 case
        ListNode* head = new ListNode(); // 作为中间变量了
        ListNode* pre = head; // 固定的头结点
        while(n--)
        {
            cin >> a;
            ListNode* tmp = new ListNode(a);
            head->m_pNext = tmp;
            head = head->m_pNext;
        }
        int k;
        cin >> k;

        //递归地取到

        ListNode* ans = getnode(pre->m_pNext, k);

        if(ans==nullptr)
        {
            cout<<-1<<endl;
        }
        else
        {
            cout<<ans->m_nKey<<endl;
        }

    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

从24年初开学开始接触到前端,和实验室几个同学一起学习,可似乎我总比他们慢一步,每每学完一个地方,我掌握的程度好像都不比他们,第一次实验室的任务实战,我两眼一抹黑,完全不知道从何下手,而他们却是游刃有余,可我当时没有丧气,只有一个念头,既然学习能力不如他们,那我就拿更多的时间去学,于是我把打游戏,运动锻炼的时间也拿来学习。到了暑假,实验室一起做项目,为了可以更好的参与进去,于是我暑假开始留校和同学师哥一起做项目,每天早上九点多去实验室,晚上十点多回宿舍,校田径队的训练没有去,中间也只回家待了一周。到暑假结束开学之后,一位很优秀的师哥拿到了几个offer,我从他身上看到了希望,双非本科就业的希望...
offer求求哩:我的评价是认知低,建议多看书,认知低的一个表现是人生仿佛没考上大学就是进厂,考上了就是考研考公找工作。股市里有一个很有意思的故事,说的是当门口大妈都在谈论股票的时候,说明行情已经见顶了。当你的父母在某些事上没有成功却支持你说明事情可能已经不可靠了,但在某些事上反对你,说明这件事可能还有成功的可能。(仅个人观点)😆😆
点赞 评论 收藏
分享
2024-12-27 10:21
已编辑
海南师范大学 媒介策划
到我怀里来:身高体重住址这些就别写了,留几个关键的就行,工作经历突出重点写详细点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务