链表中倒数第k个结点

题目描述:

输入一个链表,输出该链表中倒数第k个结点。
(hint: 请务必使用链表。)

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。
输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。

输出:

对应每个测试案例,
若有结果,输出相应的查找结果。否则,输出NULL。

样例输入:
5 2
1 2 3 4 5
1 0
5
样例输出:
4
NULL

分析:

倒数第k个,就是正数第n-k+1个

AC代码:

#include<stdio.h>
#include<stdlib.h>
 
typedef struct node {
    int data;
    struct node *next;
} linklist;
 
int main() {
    int i, n, m, k;
    linklist *head, *tail, *p;
     
    while(scanf("%d %d", &n, &k) != EOF) {
        head = (linklist *)malloc(sizeof(linklist));
        tail = head;
        head->next = NULL;
 
        for(i = 0; i < n; i++) {
            scanf("%d", &m);
            p = (linklist *)malloc(sizeof(linklist));
            p->data = m;
            p->next = NULL;
            tail->next = p;
            tail = p;
        }
 
        if(k > n || k < 1) { 
            printf("NULL\n");
        }
        else {
            p = head->next;
            /*倒数第k个,就是正数第n-k+1个:*/
            for(i = 0; i < n-k; i++) {
                p = p->next;
            }
            printf("%d\n", p->data);
        }
        free(p);
        free(head);
    }
    return 0;
}
/**************************************************************
    Problem: 1517
    User: wusuopuBUPT
    Language: C
    Result: Accepted
    Time:100 ms
    Memory:2496 kb
****************************************************************/ 


你可能感兴趣的:(链表中倒数第k个结点)