user-0 提问: 两个单链表的合并，一直提示有个错误，可是我不明白哪里错了，为什么

回复:
user: user-1
content: #include<stdio.h>  #include<stdlib.h>    typedef struct LNode  {   	int data;   	struct LNode *next;  }LNode,*LinkList; LinkList L;  LinkList createList(LinkList L,int n)//构建链表 {      	LinkList s=NULL,r=NULL,res=NULL; 	int i; 	res=r=(LinkList)calloc(1,sizeof(LNode));  	for(i=0;i<n;i++)  	{   		s=(LinkList)malloc(sizeof(LNode)); 		scanf("%d",&s->data);  		r->next=s;//表尾插入法,输入的s插到r后面。 		r=s;//移动指针r（向后移一位） 	}  	r->next=NULL; 	return res; }  LinkList MergeList(LinkList La,LinkList Lb,LinkList Lc) {     LinkList a=NULL,b=NULL,c=NULL;     a=La->next;b=Lb->next;Lc=c=La;     while(a&&b) 	{         if(a->data<=b->data) 		{             c->next=a; 			c=a; 			a=a->next;         }         else 		{             c->next=b; 			c=b; 			b=b->next;         }     }     c->next=a?a:b;     free(Lb); 	return Lc; }   void OutPutList(LinkList L)//输出链表 {   	LinkList p=NULL; 	//p=(LinkList)malloc(sizeof(LNode));//删掉这句还是可以运行 	p=L->next; 	printf("表中值为:");   	while(p)  	{   		printf("%d ",p->data);  		p=p->next;  	}   	printf("\n");  }  int main()  {    	LinkList La=NULL,Lb=NULL,Lc=NULL; 	int a,b; 	printf("请输入表长："); 	scanf("%d",&a); 	printf("请输入数："); 	La=createList(La,a); 	OutPutList(La); 	printf("请输入表长："); 	scanf("%d",&b); 	printf("请输入数："); 	Lb=createList(Lb,b); 	OutPutList(Lb); 	Lc=MergeList(La,Lb,Lc); 	printf("合并后"); 	OutPutList(Lc); 	return 0; }

user: user-0
content: 那如果我一开始就把La，Lb，Lc定义成全局变量呢？

user: user-2
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-3
content: 注意大小写 main函数里Mergelist改成MergeList

user: user-1
content: 结构体指针使用的问题，在create的时候就没有返回有效的la指针。  建议进行调试，F11进入调试，F10单步执行，通过调试查看变量以及内存的情况

user: user-4
content: #include<stdio.h>                                                                                                                                                                                           1 #include<stdlib.h>   2     3 typedef struct LNode   4 {   5     int data;   6     struct LNode *next;   7 }LNode,*LinkList;   8     9 //LinkList L;    //Not used  10    11 void createList(LinkList *L,int n)//构建链表  12 {  13     LinkList s,r;  14     int i;  15     *L = r = (LinkList)malloc(sizeof(LNode));  16     for(i=0;i<n;i++) {  17     |   s=(LinkList)malloc(sizeof(LNode));  18     |   scanf("%d",&s->data);  19     |   r->next=s;//表尾插入法,输入的s插到r后面。  20     |   r=s;//移动指针r（向后移一位）  21     }  22     r->next = NULL;  23 }  24    25 void MergeList(LinkList La,LinkList Lb,LinkList *Lc)  26 {  27     LinkList a,b,c;  28     a = La->next;  29     b = Lb->next;  30     *Lc = c = La;  31     while(a&&b)     32     {      33     |   if(a->data<=b->data)  34     |   {  35     |   |   c->next=a;  36     |   |   c=a;    37     |   |   a=a->next;  38     |   }  39     |   else   40     |   {  41     |   |   c->next=b;  42     |   |   c=b;    43     |   |   b=b->next;  44     |   }  45     }      46     c->next=a?a:b;  47     free(Lb);  48 }         void OutPutList(LinkList L)//输出链表  31 {  30     LinkList p;  29     p=(LinkList)malloc(sizeof(LNode));//删掉这句还是可以运行  28     p=L->next;  27     printf("表中值为:");  26     while(p) {  25     |   printf("%d ",p->data);  24     |   p=p->next;  23     }  22     printf("\n");  21 }  20    19 int main()  18 {  17     LinkList La, Lb, Lc;  16     La = Lb = Lc = NULL;  15     int a,b;  14     printf("请输入表长：");  13     scanf("%d",&a);  12     printf("请输入数：");  11     createList(&La,a);  10     OutPutList(La);   9     printf("请输入表长：");   8     scanf("%d",&b);   7     printf("请输入数：");   6     createList(&Lb,b);   5     OutPutList(Lb);   4     MergeList(La, Lb, &Lc);    //Function's name is error   3     printf("合并后");   2     OutPutList(Lc);   1     return 0; 84  }

user: user-4
content: #include<stdio.h>                                                                                                                                                                                           1 #include<stdlib.h>   2                      3 typedef struct LNode   4 {                    5     int data;        6     struct LNode *next;   7 }LNode,*LinkList;    8                      9 //LinkList L;    //Not used  10                     11 void createList(LinkList *L,int n)//构建链表  12 {                   13     LinkList s,r;   14     int i;          15     *L = r = (LinkList)malloc(sizeof(LNode));  16     for(i=0;i<n;i++) {  17     |   s=(LinkList)malloc(sizeof(LNode));  18     |   scanf("%d",&s->data);  19     |   r->next=s;//表尾插入法,输入的s插到r后面。  20     |   r=s;//移动指针r（向后移一位）  21     }               22     r->next = NULL;  23 }                   24                     25 void MergeList(LinkList La,LinkList Lb,LinkList *Lc)  26 {                   27     LinkList a,b,c;  28     a = La->next;   29     b = Lb->next;   30     *Lc = c = La;   31     while(a&&b)     32     {               33     |   if(a->data<=b->data)  34     |   {           35     |   |   c->next=a;  36     |   |   c=a;    37     |   |   a=a->next;  38     |   }           39     |   else        40     |   {           41     |   |   c->next=b;  42     |   |   c=b;    43     |   |   b=b->next;  44     |   }           45     }               46     c->next=a?a:b;  47     free(Lb);       48 }                   49                     50                     51 void OutPutList(LinkList L)//输出链表  52 {                   53     LinkList p;     54     p=(LinkList)malloc(sizeof(LNode));//删掉这句还是可以运行  #include<stdio.h>                                                                                                                                                                                           1 #include<stdlib.h>   2                      3 typedef struct LNode   4 {                    5     int data;        6     struct LNode *next;   7 }LNode,*LinkList;    8                      9 //LinkList L;    //Not used  10                     11 void createList(LinkList *L,int n)//构建链表    //需要传L的地址的地址，不然不能把新创建的链表的首地址获取；想获取只能通过函数的返回值来实现了  12 {                   13     LinkList s,r;   14     int i;          15     *L = r = (LinkList)malloc(sizeof(LNode));  16     for(i=0;i<n;i++) {  17     |   s=(LinkList)malloc(sizeof(LNode));  18     |   scanf("%d",&s->data);  19     |   r->next=s;//表尾插入法,输入的s插到r后面。  20     |   r=s;//移动指针r（向后移一位）  21     }               22     r->next = NULL;  23 }                   24                     25 void MergeList(LinkList La,LinkList Lb,LinkList *Lc)    //Lc需要传地址的地址，不然不能把新的链表的首地址即首节点的地址获取  26 {                   27     LinkList a,b,c;  28     a = La->next;   29     b = Lb->next;   30     *Lc = c = La;   31     while(a&&b)     32     {               33     |   if(a->data<=b->data)  34     |   {           35     |   |   c->next=a;  36     |   |   c=a;    37     |   |   a=a->next;  38     |   }           39     |   else        40     |   {           41     |   |   c->next=b;  42     |   |   c=b;    43     |   |   b=b->next;  44     |   }           45     }               46     c->next=a?a:b;  47     free(Lb);       48 }                   49                     50                     51 void OutPutList(LinkList L)//输出链表  52 {                   53     LinkList p;     54     p=(LinkList)malloc(sizeof(LNode));//删掉这句还是可以运行            p=L->next;  27     printf("表中值为:");  26     while(p) {  25     |   printf("%d ",p->data);  24     |   p=p->next;  23     }  22     printf("\n");  21 }  20    19 int main()  18 {  17     LinkList La, Lb, Lc;  16     La = Lb = Lc = NULL;  15     int a,b;  14     printf("请输入表长：");  13     scanf("%d",&a);  12     printf("请输入数：");  11     createList(&La,a);  10     OutPutList(La);   9     printf("请输入表长：");   8     scanf("%d",&b);   7     printf("请输入数：");   6     createList(&Lb,b);   5     OutPutList(Lb);   4     MergeList(La, Lb, &Lc);    //Function's name is error   3     printf("合并后");   2     OutPutList(Lc);   1     return 0; 84  }