思路

  1. 首先创建链表
  • 创建头结点(头结点指向NULL,元素值一般不使用)
  • 创建的节点开始指向0,值为输入的数值
  • 利用头插法,创建的节点指向头结点的下一结点,将数据元素倒序存储到链表中
  1. 因为输入多组数据,因此使用while循环输入
  2. 获得位置元素,找到对应位置的数据输出
  3. 使用完循环释放内存,防止内存泄漏

Answer

#include<stdio.h>
#include<stdlib.h>

typedef struct node{
    int key;
    struct node *next;
}listnode, *listlink;

int main(){
    int len,pos;
    listlink H;
    listlink p;
    
    while(scanf("%d",&len) != EOF){
        //创建头结点
        H = (listlink)malloc(sizeof(listnode));
        H->key = 0;
        H->next = NULL;
        
        for(int i=0; i<len; i++){
            
            p = (listlink)malloc(sizeof(listnode));
            scanf("%d",&p->key);
            p->next = NULL;
            //头插法,相当于倒序输入
            p->next = H->next;
            H->next = p;
            
        }
        scanf("%d",&pos);
        p=H;
        for(int i=0;i<pos; i++){
            p = p->next;
        }
        printf("%d\n",p->key);
        
        p = H;
        for(int i=0; i<len; i++){
            p = H->next;
            H->next = p->next;
            free(p);
        }
        free(H);
    }

    return 0;
}