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

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

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

#include <iostream>
using namespace std;
struct ListNode{
    int val;
    ListNode* next;
    ListNode(int val):val(val),next(nullptr){}
};//链表定义和初始化
int main() {
int n,k;
while(cin>>n){
int size=0;
int val;
ListNode* dummyHead=new ListNode(0);//在最前面定义一个虚拟头节点,这样不论是头结点还是后面的普通节点都直接用同一段代码正常插入删除即可
ListNode* cur=dummyHead;//cur用来遍历节点
while(n){//输入的数值全部存入链表的新节点中
cin>>val;
ListNode* newNode=new ListNode(val);
cur->next=newNode;
cur=cur->next;
n--;
size++;//每输入一个数值,size++,手动来记录链表的长度
}
cin>>k;
 if(k>size||k<=0){return 0;}//如果数值不合法,直接返回
 else {
    cur=dummyHead;//用来遍历的节点cur重新回到虚拟头结点处等待遍历
    while(size-k+1){
        cur=cur->next;
        k++;//目的是为了让while循环的条件 size-k+1不断减1,所以就让k++
    }
    if(cur!=nullptr)//最后也要检验一下输出的合法性,合法再输出
    cout<<cur->val<<endl;
 }
}
return 0;
}

全部评论

相关推荐

03-05 14:55
已编辑
门头沟学院 Java
Jhin4ever:别去,杂活太多,今天让你部署一下模型,明天让你写一下LLM工作流,后天要你研究一下Agent,想微调模型都难
点赞 评论 收藏
分享
逆流河上万仙退:可能是发的钱太少了 怕你过来实习还要自己贴钱 意向就不高 省的浪费大家时间 可能你通过了也不会去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务