c语言输出链表偶数结点

先输入N个整数,按照输入的顺序建立链表。然后遍历并输出偶数位置上的结点信息。
第一行输入整数的个数N 1≤N≤100;第二行依次输入N个整数。
输出该链表偶数位置上的结点的信息。
输入
2
8
12 56 4 6 55 15 33 62
3
1 2 1
输出
56 6 15 62
2

供参考:

#include <stdio.h>
#include <malloc.h>

typedef struct Node {// 链表节点结构
    int    data;
    struct Node* next;
}Node, * LinkList;
void destroyNodes(LinkList L)
{
    Node *pL = NULL;
    while(L){
        pL = L;
        L = pL->next;
        free(pL);
    }
}
void show(LinkList L)//输出单链表偶数位置结点信息
{
    if (L == NULL || L->next == NULL) return;
    int i = 0;
    Node* p = L->next;
    while (p) {
        if ((i+1) % 2 == 0)
            printf(i+1 == 2 ? "%d":" %d", p->data);
        i++;
        p = p->next;
    }
    printf("\n");
}

// 创建链表
void createListFromHead(LinkList* L, int n)
{
    Node* pL;
    int   i;
    (*L) = (Node*)malloc(sizeof(Node));// 创建头结点
    (*L)->data = -1;
    (*L)->next = NULL;
    pL = (*L);
    for (i = 0;i < n; i++) // 生成链表
    {
        Node* p = (Node*)malloc(sizeof(Node));
        p->next = NULL;
        scanf("%d", &p->data);
        pL->next = p;
        pL = p;
    }
}
int main()
{
    int n, m;
    scanf("%d", &n);
    while (n--){
          scanf("%d", &m);
          LinkList L = NULL;
          createListFromHead(&L, m);
          show(L);
          destroyNodes(L);
    }
    return 0;
}