单链表的基本操作—为什么运行后没有打印的东西呢?

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

//声明节点结构
typedef struct Link
{
int data;
struct Link *next;
}link;
//初始化
void ListInitiate(link **head)
{
*head = (link *) malloc (sizeof(link));
(head)->next = NULL;
}
//求当前数据元素的个数
/

循环前,指针变量p指向头节点,计数变量size等于0.
循环的结束条件为p->next != NULL,循环中每次让指针p指向它的直接后继结点,让size加1.
最后函数返回计数值size
*/
int ListLength(link *head)
{
link *p = head;
int size = 0;

while(p->next != NULL)
{
    p = p->next;
    size++;
}
return size;

}
//插入
int ListInsert(link *head, int i, int x)
{
link *p, *q;
int j;

p = head;
j = -1;
while(p->next !=NULL && j < (i-1))
{
    p = p->next;
    j++;
}

if(j != i-1)
{
    printf("插入元素位置参数错!");
    return 0;
}

q = (link *)malloc(sizeof(link));
q->data = x;

q->next = p->next;
p->next = p;
return 1;

}
//删除
int ListDelete(link *head,int i,int *x)
{
link *p, *s;
int j;

p = head;
j = -1;
while(p->next != NULL && p->next->next != NULL && j < i-1)
{
    p = p->next;
    j++;
}

if(j != i-1)
{
    printf("删除元素位置参数错!");
    return 0;
}

s = p->next;
*x = s->data;
p->next = p->next->next;
free(s);
return 1;

}
//取数据元素
int ListGet(link *head,int i,int *x)
{
link *p;
int j;

p = head;
j = -1;
while(p->next != NULL && j<i)
{
    p = p->next;
    j++;
}

if(j != 0)
{
    printf("取元素位置参数错!");
    return 0;
}

*x = p->data;
return 1;

}
//撤销单链表
void Destory(link **head)
{
link *p, *p1;

p = *head;
while(p != NULL)
{
    p1 = p;
    p = p->next;
    free(p1);
}
*head = NULL;

}

int main(void)
{
link *head;
int i,x;

ListInitiate(&head);
for(i=0; i<10; i++)
{
    ListInsert(head,i,i+1);
}

ListDelete(head,4,&x);
for(i=0; i<ListLength(head); i++)
{
    ListGet(head,i,&x);
    printf("%d   ",x);
}

Destory(&head);

return 0;

}

修改如下,修改见注释处,供参考:

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

//声明节点结构
typedef struct Link
{
    int data;
    struct Link *next;
}link;
//初始化
void ListInitiate(link **head)
{
    (*head) = (link *) malloc (sizeof(link));
    (*head)->next = NULL;
}
//求当前数据元素的个数
int ListLength(link *head)
{
    link *p = head->next;     //link *p = head;
    int size = 0;
    while(p != NULL)          //while(p->next != NULL)
    {
        size++;
        p = p->next;
    }
    return size;
}

//插入
int ListInsert(link **head, int i, int x)//int ListInsert(link *head, int i, int x)
{
    link *p, *q;
    int j;
    p = (*head);
    j = 0;                             //j = -1;
    while(p->next !=NULL && j<(i-1))
    {
        p = p->next;
        j++;
    }
                                       //if(j > i-1)//if(j != i-1)
                                       //{
                                       //    printf("插入元素位置参数错!");
                                       //    return 0;
                                       //}
    q = (link *)malloc(sizeof(link));
    q->data = x;
    q->next = p->next;
    p->next = q;                       //p->next = p;
    return 1;
}
//删除
int ListDelete(link *head,int i,int *x)
{
    link *p, *s;
    int j;
    p = head;
    j = 0;                           //j = -1;
    while(p->next != NULL && j < i-1 )//while(p->next != NULL && p->next->next != NULL && j < i-1)
    {
        p = p->next;
        j++;
    }
    if(!p->next || i< 1)             //if(j != i-1)
    {
        printf("删除元素位置参数错!");
        *x = -1;
        return 0;
    }
    s = p->next;
    *x = s->data;
    p->next = p->next->next;
    free(s);
    return 1;
}
//取数据元素
int ListGet(link *head,int i,int *x)
{
    link *p;
    int   j;
    p = head;
    j = 0;                   //j = -1;
    while(p != NULL && j < i)//while(p->next != NULL && j < i)
    {
        j++;
        p = p->next;
    }
    if(!p || i < 1)         //if(j != 0)
    {
        printf("取元素位置参数错!");
        *x = -1;
        return 0;
    }
    *x = p->data;
    return 1;
}
//撤销单链表
void Destory(link **head)
{
    link *p, *p1;
    p = (*head)->next;  // p = *head;
    while(p != NULL)
    {
         p1= p;
         p = p->next;
         free(p1);
    }
    free((*head));     //修改
    (*head) = NULL;
}

int main(void)
{
    link *head;
    int i,k,x;         //修改
    ListInitiate(&head);
    
    for(i=0; i<10; i++)
    {
        ListInsert(&head,i+1,i+1);//修改
    }

    ListDelete(head,4,&x);
    printf("Del:%d\n",x);  //修改
    
    k = ListLength(head);

    for(i=0; i < k; i++)
    {
        ListGet(head,i+1,&x); //修改
        printf("%d   ",x);
    }

    Destory(&head);
    
    return 0;
}