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

#include <bits/stdc++.h>

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){};
};

ListNode* findNode(ListNode* head, int k){
    ListNode* slow = head;
    ListNode* fast = head;
    
    while(k--){
        fast = fast->m_pNext;
    }
    //fast = fast->m_pNext;
    
    while(fast != nullptr){
        slow = slow->m_pNext;
        fast = fast->m_pNext;
    }
    
    return slow;
}

int main(){
    int num = 0;
    while(cin >> num){
        //构建链表
        ListNode* head = new ListNode();
        ListNode* dummyHead = head;
        
        while(num--){
            int nodeNum = 0;
            cin >> nodeNum;
            ListNode* next = new ListNode(nodeNum);
            head->m_pNext = next; //
            head = next; //
        }
        
        //寻找倒数第k个节点
        int k = 0;
        cin >> k;       
        ListNode* res = findNode(dummyHead->m_pNext, k); //
        
        if(res != nullptr){
            cout << res->m_nKey << endl;
        }
        else{
            cout << "0" << endl;
        }
    }
    
    return 0;
}
全部评论

相关推荐

迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务