题解 | #输出单向链表中倒数第k个结点# 用尾插法与双指针

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

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

#include <iostream>
using namespace std;

//定义链表
struct ListNode{
    int val;
    ListNode* next;
    ListNode(int x):val(x),next(nullptr){}; //初始化函数
};

int main() {
    int num,val;
    while(cin>>num){ //测试用例有多次输入
        cin>>val;
        //使用尾插法建立链表
        ListNode* head=new ListNode(val); //头结点
        ListNode* p=head; //尾指针
        for(int i=1;i<num;i++){
            cin>>val;
            ListNode* q=new ListNode(val); //插入结点
            p->next=q; //将上一结点与插入结点建立连接
            p=q; //保持尾指针指向最后一个结点
        }
        p->next=nullptr; //指向空
        //使用双指针找倒数第k个数
        int k;
        cin>>k;
        ListNode* fast=head,* slow=head;
        while(k--){
            fast=fast->next;
        }
        while(fast!=nullptr){
            fast=fast->next;
            slow=slow->next;
        }
        cout<<slow->val<<endl;;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

头发暂时没有的KFC总裁:找廉价劳动力罢了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务