user-0 提问: 合并线性表

回复:
user: user-0
content: 弄好了！谢谢你！

user: user-0
content: 有道理！我试试！

user: user-1
content: 我找到你错哪里了 mergelist这个函数里面，你的head指针在不断往后移动对吧，最后函数结束的时候，head在链表的末尾，并且后面还head->next=NULL; 你忘了把head移回头结点了  看你的main里，执行mergelist(L,Q,p)这一句，其中p就是上面说的head对吧，所以这个函数的最后一句head->next=NULL使得p-next为NULL了，因此接下来你执行printlist_single(p)的时候，里面那句while(p->next!=NULL)直接就过不去了

user: user-0
content: void printlist_single(list *&L)//has been done { 	list *p; 	p=L; 	while(p->next!=NULL) 	{ 		p=p->next; 		printf("%d",p->D); 		if(p->next==NULL) 			printf(" "); 	} }  void mergelist(list *&L,list *&Q,list *&head) { 	init_single(head); 	list *p,*q; 	p=L->next; 	q=Q->next; 	while(p!=NULL && q!=NULL) 	{ 		if(p->D>=q->D) 		{ 			head->next=p; 			p=p->next; 		} 		else if(p->D<q->D) 		{ 			head->next=q; 			q=q->next; 		} 		head=head->next; 	} 	while(p!=NULL) 	{ 		head->next=p; 		p=p->next; 		head=head->next; 	} 	while(q!=NULL) 	{ 		head->next=q; 		q=q->next; 		head=head->next; 	} 	head->next=NULL;  }   改成了还是不行呀！ 木有输出。  另外，这个链表是有头结点的链表

user: user-0
content: #include "stdio.h" #include "stdlib.h" #include "malloc.h"  #define Element int //to adjust Element's type #define turn int //to adjust which point to choice printup or printdown  //if change "int",The scanf's number in it must be change too;  typedef struct Single { 	Element D; 	Single *next;//to back }list; //single list type  //单链表例程 void init_single(list *&L); void creatlist_single(list *&L,Element n); void printlist_single(list *&L); void mergelist(list *&L,list *&Q,list *&head);  void init_single(list *&L)//has been done { 	L=(list*)malloc(sizeof(list)); 	L->next=NULL; }  void creatlist_single(list *&L,int n)//has been done { 	list *s,*r; 	init_single(L); 	r=L; 	while(n!=0) 	{ 		s=(list*)malloc(sizeof(list)); 		scanf("%d",&s->D); 		r->next=s; 		r=r->next;//use plus to position to position 		n--; 	} 	r->next=NULL; }  void printlist_single(list *&L)//has been done { 	list *p; 	p=L; 	while(p->next!=NULL) 	{ 		p=p->next; 		printf("%d",p->D); 		if(p->next==NULL) 			printf(" "); 	} }  void mergelist(list *&L,list *&Q,list *&head) { 	init_single(head); 	list *p,*q; 	p=L->next; 	q=Q->next; 	while(p!=NULL && q!=NULL) 	{ 		if(p->D>=q->D) 		{ 			head->next=p; 			p=p->next; 		} 		else if(p->D<q->D) 		{ 			head->next=q; 			q=q->next; 		} 		head=head->next; 	} 	while(p!=NULL) 	{ 		head->next=p; 		p=p->next; 		head=head->next; 	} 	while(q!=NULL) 	{ 		head->next=q; 		q=q->next; 		head=head->next; 	} 	head->next=NULL;  }  int main() { 	int n,m; 	list *L,*Q; 	list *p; 	init_single(p); 	scanf("%d",&n); 	creatlist_single(L,n); 	scanf("%d",&m); 	creatlist_single(Q,m); 	mergelist(L,Q,p); 	printlist_single(p); 	return 0; }   如图，这种建表方法是我们ACM里面教的，我看的数据结构的书建表方法也不是如此→_→，他们用的typedef，但那种方法我还没太明白，可以的话能不能帮忙改一下？

user: user-1
content: 引用 2 楼 u012514377 的回复: void printlist_single(list *&L)//has been done { 	list *p; 	p=L; 	while(p->next!=NULL) 	{ 		p=p->next; 		printf("%d",p->D); 		if(p->next==NULL) 			printf(" "); 	} }  void mergelist(list *&L,list *&Q,list *&head) { 	init_single(head); 	list *p,*q; 	p=L->next; 	q=Q->next; 	while(p!=NULL && q!=NULL) 	{ 		if(p->D>=q->D) 		{ 			head->next=p; 			p=p->next; 		} 		else if(p->D<q->D) 		{ 			head->next=q; 			q=q->next; 		} 		head=head->next; 	} 	while(p!=NULL) 	{ 		head->next=p; 		p=p->next; 		head=head->next; 	} 	while(q!=NULL) 	{ 		head->next=q; 		q=q->next; 		head=head->next; 	} 	head->next=NULL;  }   改成了还是不行呀！ 木有输出。  另外，这个链表是有头结点的链表  你贴的这部分我看好像没什么问题 不过你的函数参数为什么又是指针又是引用的，你的list是怎么定义的？

user: user-1
content: while(p!=NULL || q!=NULL)  ||应为&&