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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务