题解 | #输出单向链表中倒数第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")
查看15道真题和解析