快慢指针法

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

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

//
// Created by Administrator on 2024/4/12.
//
#include <iostream>

using namespace std;

struct ListNode {
    int m_nKey;
    ListNode *m_pNext;
};

int main() {
    int node_num;
    ListNode *head = (ListNode *) malloc(sizeof(ListNode)); //构建空的头节点方便后续操作
    ListNode *tail = head;  //尾指针,以便尾插法构建链表
    while (cin >> node_num) {
        for (int i = 0; i < node_num; ++i) {
            int value;
            cin >> value;
            ListNode *node = (ListNode *) malloc(sizeof(ListNode));
            node->m_nKey = value;
            node->m_pNext = nullptr;    //需要把新节点的下一个节点置为空节点,否则会出现异常
            tail->m_pNext = node;
            tail = node;
        }

        int target;
        cin >> target;
        ListNode *prev = head, *curt = prev;    //双指针法
        while (target--)
            curt = curt->m_pNext;

        if (curt == nullptr)
            return -1;

        while (curt != nullptr) {
            prev = prev->m_pNext;
            curt = curt->m_pNext;
        }

        cout << prev->m_nKey << endl;

    }
    free(head);
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务