题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode
{
int m_nKey;
struct ListNode* m_pNext;
}ListNode;
int main() {
int n,i;
while (scanf("%d",&n) != EOF) { // 注意 while 处理多个 case
ListNode *phead,*pbuf,*pnew;
phead = (ListNode *)malloc(sizeof(ListNode)); //创建头节点
phead->m_pNext = NULL;
pbuf = phead;
for(i=0;i<n;i++){ //循环头插新节点,注意头插后节点是倒序的
pnew = (ListNode *)malloc(sizeof(ListNode));
scanf("%d",&pnew->m_nKey);
pnew->m_pNext = pbuf->m_pNext;
pbuf->m_pNext = pnew;
}
int pos,len=0;
scanf("%d",&pos);
while(pbuf->m_pNext != NULL){ //获取链表长度(根据题目要求忘记创建节点数n)
pbuf = pbuf->m_pNext;
len++;
}
pbuf = phead;
for(i=0;i<pos;i++){ //根据pos找到目标节点
pbuf = pbuf->m_pNext;
}
printf("%d\n",pbuf->m_nKey); //打印目标节点数据
for(i = 0;i<len;i++){ //循环释放节点空间
pbuf = phead->m_pNext;
phead->m_pNext = pbuf->m_pNext;
free(pbuf);
}
free(phead);
}
return 0;
}

