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