user-0 提问: 求大佬帮我看下这个c语言链表哪出问题了

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-3
content: 删除和显示输出链表函数，增加对空链表的判断及反馈，供参考：int DeleteList_L(LinkList L, int i)				//删除L中第i个元素，并用e返回其值 { 	LinkList p, q; 	int j = 0; 	p = L;     if(L == NULL){        printf("这是一个空链表！\n");        return -1;     } 	//printf("请输入要删除的结点位置：");  	while (p->next && j < i-1)                  //寻找第i个结点，并令p指向其前驱 	{ 		p = p->next; 		++j; 	} 	if (!(p->next) || j > i) exit(1);            //删除位置不合理 	q = p->next;                                 //临时保存被删除结点的地址以备释放 	p->next = q->next;                           //改变删除结点的前驱结点指针域 	free(q); //释放     return 0; }  void ShowList(LinkList L)					//打印整个链表 { 	LinkList p; 	if (L == NULL) 	{ 		printf("这是一个空链表！\n");         return; 	} 	printf("单链表");     p = L->next; 	while (p) 	{ 		printf(" -> %d", p->data); 		p = p->next; 	} 	printf("\n"); }

user: user-4
content: #include<stdio.h> #include<stdlib.h>  typedef int Elemtype; typedef struct LNode                                //定义一个结构体 {     Elemtype data;                                   //结点的数据域     struct LNode *next;                              //节点的指针域 }LNode , *LinkList;                                  //指针类型  int InitList(LinkList L)                            //带有头节点的单链表的初始化 {     L= (LinkList)malloc(sizeof(LNode));     if (!L)                                          //储存分配失败退出     {         printf("分配内存失败！\n");         exit(0);     }     L->next = NULL;                                 //空表长度为null     return 0; }  int LengthList(LinkList L)                    //计算链表长度 {     int length = 0;     LinkList p;     p = L->next;     while (p)     {         length++;         p = p->next;     }     return length; }  int GetElem(LinkList L, int i, Elemtype e)            //用e返回L中第i个元素值 {     LinkList p;                                     //初始化，p指向首元结点，计数器j=1     int j = 1;     p = L->next;                                    //顺序链表向后扫描，直到p为空或者p指向第i个元素     while (p && j < i)     {         p = p->next;                                //p指向下一个元素         ++j;     }     if (!p || j > i)                              //i不合法     {         printf("查询不到该元素！\n");         return 0;     }     e = p->data;     return 0; }   void CreateList_F(LinkList *L,int n)            //头插法创建一个单链表，n为要插入的元素个数 {     int i;     LinkList p;     (*L) = (LinkList)malloc(sizeof(LNode));     (*L)->next = NULL;     printf("请输入您要插入元素的个数：");     scanf("%d", &n);     printf("请输入你要插入的元素值(用空格隔开)：");     for (i = n; i >0;--i)     {         p = (LNode*)malloc(sizeof(LNode));         //scanf_s("%d", &p->data);         scanf("%d", &p->data);         p->next = (*L)->next;         (*L)->next = p;     }  }  int InsertList_L(LinkList L, int i, Elemtype e)            //在L中第i个位置插入元素e {     LinkList p, s;     int j = 0;     p = L;     while (p && j < i)                                  //寻找第i-1结点     {         p = p->next;         ++j;     }     if (!p || j > i) exit(1);                         //i大于表长+1或者小于1     s = (LinkList)malloc(sizeof(LNode));               //生成新结点s     s->data = e;                                      //将结点的数据域置为e     s->next = p->next;                                 //将结点s插入L中     p->next = s;     return 0; }  int DeleteList_L(LinkList L, int i)                //删除L中第i个元素，并用e返回其值 {     LinkList p, q;     int j = 0;     p = L;     //printf("请输入要删除的结点位置：");      while (p->next && j < i-1)                  //寻找第i个结点，并令p指向其前驱     {         p = p->next;         ++j;     }     if (!(p->next) || j > i) exit(1);            //删除位置不合理     q = p->next;                                 //临时保存被删除结点的地址以备释放     p->next = q->next;                           //改变删除结点的前驱结点指针域     free(q); //释放     return 0; }  void ShowList(LinkList L)                    //打印整个链表 {     LinkList p;     p = L->next;     if (p == NULL)     {         printf("这是一个空链表！\n");     }     printf("单链表");     while (p)     {         printf(" -> %d", p->data);         p = p->next;     }     printf("\n"); }  //main() int main() {     LinkList L;     int n;     int i,k;     printf("单链表的操作：\n");     printf("\t1.头插法建立单链表\n");     printf("\t2.输出单链表\n");     printf("\t3.删除结点\n");     printf("\t4.退出\n");     do     {          printf("选择所需功能: ");         scanf("%d",&k);         switch(k)         {             case 1:CreateList_F(&L, n);                    break;             case 2:printf("单链表为：\n");                    ShowList(L);                    break;              case 3:                    printf("请输入要删除的结点位置: ");                    scanf("%d", &i);                    DeleteList_L( L, i);                    break;              case 4:printf("退出");                    exit(0);             default:printf("输入错误\n");                     exit(0);         }     }while(1); } 供参考～

user: user-1
content: C和C++ 完整教程：https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-5
content: int InitList(LinkList L)                            {     L= (LinkList)malloc(sizeof(LNode));             //修改形参没有用处，离开这个函数形参就结束存在了     if (!L)                                              {         printf("分配内存失败！\n");         exit(0);     }     L->next = NULL;                                      return 0; }