快慢指针法

输出单向链表中倒数第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;
}

全部评论

相关推荐

Bug压路:老哥看得出来你是想多展示一些项目,但好像一般最多两个就够了😂页数一般一页,多的也就2页;这些项目应该是比较同质化的,和评论区其他大佬一样,我也觉得应该展示一些最拿手的(质量>数量)😁😁😁专业技能部分也可以稍微精简一些
点赞 评论 收藏
分享
头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务