题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
#include <bits/stdc++.h>
using namespace std;
typedef struct ListNode
{
int m_nKey;
ListNode* m_pNext;
}*listnode;//listnode命名相当于struct ListNode*
int main() {
int n;
while(cin>>n){//多组样例,输入必须写成循环
listnode head = (ListNode*)malloc(sizeof(ListNode));//定义头节点
listnode p;//临时节点
head->m_pNext=NULL;//指向空
p=head;//初始时,两个点相同
for(int i=0;i<n;i++){
int temp;
cin>>temp;//输入的key值
if(i==0){//赋初值
p->m_nKey=temp;
continue;
}
listnode tempnode = (ListNode*)malloc(sizeof(ListNode));//malloc开辟空间
tempnode->m_pNext=NULL;//开辟的空间指向空
tempnode->m_nKey=temp;//新空间存key值
p->m_pNext=tempnode;//p指向该节点第一步
p=p->m_pNext;//p指向该节点第二步
}
int k;
cin>>k;
p=head;
while(k>0){//双指针,第一个指针与第二个指针差k,当第二个指针为空,第一个指针就指向倒数第k个节点
p=p->m_pNext;
k--;
}
while(p!=NULL){
p=p->m_pNext;
head=head->m_pNext;
}
cout<<head->m_nKey<<endl;
}
}
// 64 位输出请用 printf("%lld")
查看4道真题和解析