单链表的创建,按位序插入和按位序删除,请问哪里需要改进,运行不出来

#include <stdio.h>
#include <windows.h>
#include<stdlib.h>
#include
#include
using namespace std;
typedef char DataType; //将char重命名为DataType

// 定义单链表结构体
typedef struct node
{
DataType data; //定义数据域
struct node* next; //定义指针域
}ListNode;
typedef ListNode* LinkList;
ListNode* p;
LinkList head;

LinkList InitLinkList(LinkList& L) {
L = (ListNode*)malloc(sizeof(ListNode)); // 分配一个头结点
if (L == NULL) {
return NULL;
}
L->next = NULL;
return L;
}

LinkList CreatListF(void) {
DataType ch;
LinkList head;
ListNode* s;
head = NULL;
printf("请输入链表各结点的数据(字符型):\n");
cin >> ch;
while ((ch = getchar()) != '\n') {
s = (ListNode*)malloc(sizeof(ListNode));
s->data = ch;
s->next = head;
head = s;
}
return head;
}

ListNode* GetNode(LinkList head, int i) {
int j = 0;
ListNode* p = head;
while (p->next != NULL && j < i) {
p = p->next;
j++;
}
if (i == j)
return p;
else return NULL;
}

int InsertList(LinkList head, DataType x, int i) {
ListNode* p, * s;
p = GetNode(head, i - 1);
if (p == NULL) {
printf("未找到第%d个结点", i - 1);
return 0;
}
s = (ListNode*)malloc(sizeof(ListNode));
s->data = x;
s->next = p->next;
p->next = s;
return 1;
}

int DeleteList(LinkList head, int i) {
ListNode* p, * r;
p = GetNode(head, i - 1);
if (p == NULL||p->next==NULL) {
printf("未找到第%d个结点", i - 1);
return 0;
}
r = p->next;
p->next = r->next;
free(r);
return 1;

}
int main() {
LinkList L;
L = InitLinkList(L);
CreatListF( );
InsertList(L, 'g', 4);
DeleteList(L, 2);
return 0;
}

你可以参考一下,我博客中的单链表操作