HJ51. 输出单向链表中倒数第k个结点
描述
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
struct ListNode { int m_nKey; ListNode* m_pNext; };
输入描述
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出描述
输出一个整数
示例1
输入:
8 1 2 3 4 5 6 7 8 4
输出:
5
C 解法, 执行用时: 1ms, 内存消耗: 268KB, 提交时间: 2020-12-02
#include <stdio.h> #include <stdlib.h> typedef struct ListNode { int m_nKey; struct ListNode* m_pNext; } LST ; int main(void) { int n, k, i, j; LST *Last; while( scanf("%d", &n)!=EOF ) { LST *Header = (LST *)malloc( sizeof(LST) ); Header->m_pNext = NULL; scanf("%d", Header); Last = Header; for(i=1; i<n; i++){ Last->m_pNext = (LST *)malloc( sizeof(LST) ); scanf("%d", Last->m_pNext); Last = Last->m_pNext; } Last->m_pNext = NULL; scanf("%d", &k); if(k>=1 && (j=n-k)>=0){ for(i=0; i<j; i++) { Last = Header->m_pNext; free(Header); Header = Last; } printf("%d\n", Header->m_nKey); } else printf("0\n"); while(Header) { Last = Header->m_pNext; free(Header); Header = Last; } } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 312KB, 提交时间: 2020-12-19
#include<stdio.h> #include<stdlib.h> typedef struct ListNode { int m_nKey; struct ListNode* m_pNext; }ListNode; int main() { int n; int num,k; int i; ListNode* p; ListNode* head; while(scanf("%d",&n)!=EOF) { p=(ListNode*)malloc(sizeof(ListNode)); p->m_pNext=NULL; head=p; for(i=0;i<n;i++) { scanf("%d",&p->m_nKey); p->m_pNext=(ListNode*)malloc(sizeof(ListNode)); p=p->m_pNext; } p=NULL; p=head; scanf("%d",&num); k=n-num; if(k>=1 && k<=n) { for(i=0;i<k;i++) { p=p->m_pNext; } printf("%d\n",p->m_nKey); } else{printf("\0\n");} p=head; for(i=0;i<n;i++) { p=p->m_pNext; free(head); head=p; } } return 0; }