当前位置:   article > 正文

数据结构 两个递增有序列表合并为一个递增有序列表的解决方法_通过递增序列 l1 和 l2 得到合并后的递增序列 l

通过递增序列 l1 和 l2 得到合并后的递增序列 l

数据结构

两个递增有序列表合并为一个递增的有序链表(要求:不占用多余存储空间,新链中不允许有重复元素)
求解思路
  • 假设两个需要和合并的链表为La和Lb,合并后的头指针用Lc来代替。设置pa,pb分别为La,Lb的工作指针,pc用来保证新链的完整性。
	Lnode mergelist(LinkList &a,LinkList &b){			//将两个有序链表合并为一个链表
	LinkList *Lc = new Lnode;
	Lnode *pa,*pb,*pc;
	pa = La->next;									//工作指针pa
	pb = Lb->next;
	pc = Lc = La;									//合并后的新链Lc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 进入循环当pa与pb其中一个为空时退出循环
 	while (pa&&pb){									//当pa或者pb其中有一个链为空时停止循环
  • 1
  • pa与pb对比时分为pa<pb;pa>pb;pa=pb三总情况
    • 当pa<pb时,先将pc->next指向pa,再将pa赋值给pc,最后pa向后移动一位,代码如下:
    	if(pa->data<pb->data){						//pa.data小于pb.data时
    		pc->next = pa;							//保证链表的连续
    		pc=pa;									//pc向后走
    		pa=pa->next;							//pa向后走
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 当pa>pb时,先将pc->next指向pb,再将pb赋值给pc,最后pb向后移动一位,代码如下:
    	else if(pa->data>pb->data){				//pa.data大于pb.data时
    		pc->next = pb;
    		pc=pb;
    		pb=pb->next;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 当pa==pb时,我们取pa的值,并将pb的值进行删除
	else {										//pa.data等于pb.data时
		 pc->next=pa;
		 pc=pa;
		 pa=pa->next;
		 q=pb->next;
		 delete pb;
		 pb = q;
	}
	- 注意:delete 删除pb时,删除的是pb指向的内容而不是pb这个指针变量
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 剩下就是连接未遍历完成的链,再删除Lb头指针即可。
	pc->next = pa?pa:pb;
	delete Lb;
  • 1
  • 2
完整代码如下:
	Lnode *mergelist(LinkList &a,LinkList &b){			//将两个有序链表合并为一个链表
	LinkList *Lc = new Lnode;
	Lnode *pa,*pb,*pc;
	pa = La->next;									//工作指针pa
	pb = Lb->next;
	pc = Lc = La;									//合并后的新链Lc
	while (pa&&pb){									//当pa或者pb其中有一个链为空时停止循环
		if(pa->data<pb->data){						//pa.data小于pb.data时
			pc->next = pa;							//保证链表的连续
			pc=pa;									//pc向后走
			pa=pa->next;							//pa向后走
		}
		else if(pa->data>pb->data){				//pa.data大于pb.data时
			pc->next = pb;
			pc=pb;
			pb=pb->next;
		}
		else {										//pa.data等于pb.data时
			 pc->next=pa;
			 pc=pa;
			 pa=pa->next;
			 q=pb->next;
			 delete pb;
			 pb = q;
		}
	}	
	pc->next = pa?pa:pb;
	delete Lb;
	return Lc;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据结构灵魂2/article/detail/62942
推荐阅读
相关标签
  

闽ICP备14008679号