数据结构:两条带头结点的升序的单链表合并为升序的单链表和降序的单链表,不删除重复元素。

本文详细介绍了如何将两个升序链表合并为一个升序链表,并在此基础上实现降序链表的创建。通过具体代码示例,阐述了如何避免断链问题,以及如何通过逆置操作实现链表的降序排列。

写代码中碰到的问题:
1、忽略了原来两条链表的最后一个结点的next=NULL。
第一次失败:多加了p3->next=NULL;导致程序错误。
第二次失败while(p1),while(p2)中让:p3->next=p1->next ; p3->next=p2->next;
思想:1、通过(新链表L3)的next连接L1,L2中的结点。
2、用p3(指向L3)来防止断链。

linklist mergeAscend(linklist L1,linklist L2)
{        linklist p1=L1->next,p2=L2->next,p3,L3,head;
         head=(linklist)malloc(sizeof(node));
         head->next=NULL;
         L3=head;
         p3=L3;
         while(p1&&p2){
         	if(p1->info<p2->info){
         		p3->next=p1;
         		p1=p1->next;
			 }
			else{
				p3->next=p2;
				p2=p2->next;
			}
			p3=p3->next;
		 }
		 while(p1){
		 	p3->next=p1;
		 	p3=p3->next;
		 	p1=p1->next;
		 }
		 while(p2){
		 	p3->next=p2;
		 	p3=p3->next;
		 	p2=p2->next;
		 }
		 return head;
}

降序排列是在升序排列的基础上做的改善。(相当于站在巨人的肩膀上)
思想:1、对于题目中原有的升序单链表,先升序。
2、单链表的逆置。

linklist mergeDescend(linklist L1,linklist L2)
{      
         linklist p1=L1->next,p2=L2->next,p3,L3,head,p,s;
         head=(linklist)malloc(sizeof(node));
         head->next=NULL;
         L3=head;
         p3=L3;
         while(p1&&p2){
         	if(p1->info<p2->info){
         		p3->next=p1;
         		p1=p1->next;
			 }
			else{
				p3->next=p2;
				p2=p2->next;
			}
			p3=p3->next;
		 }
		 while(p1){
		 	p3->next=p1;
		 	p3=p3->next;
		 	p1=p1->next;
		 }
		 while(p2){
		 	p3->next=p2;
		 	p3=p3->next;
		 	p2=p2->next;
		 }
         p=L3->next;
         L3->next=NULL;
         while(p){
         	s=p;
         	p=p->next;
         	s->next=L3->next;
         	L3->next=s;
		 }
		 return L3;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值