合并两个有序链表

迭代法
创建一个头结点,让t指向头结点
每次循环保证t的指向的下一个节点是两链表的节点相比,值小的那一个节点。
若其中一个表已经遍历完了,因为是有序链表,所以直接把另一个链表接到后面。


struct Lian*MergeTwoList_Two(node *L1,node *L2){
  if (!L1)
  return L2;
 if (!L2)
  return L1;
 struct Lian *head = (struct Lian*)malloc(sizeof(node)),*t = head;
 while (L1&&L2){
  if (L1->a<=L2->a){
   t->next=L1;
   L1=L1->next;
  }   
  else{
   t->next =L2;
   L2=L2->next;
  }
  t=t->next;    
 }
 if(!L1) t->next=L2;
 else if(!L2) t->next=L1;
 return head->next;
}

递归法
不要把递归想的太细化,不要向每一步具体做什么,那样会很容易混乱的。可以找到一个大体的规律,假设当前的节点是p,这个题的规律大致就是,p->next每次都指向——p->next的数值和另一个链表的当前节点的数值相比较小的那一个节点。
规律找到了,怎么开始写代码,可以先实现简单化一点的,简单化的也属于找到的规律的。所以最简单的情况就是其中的一个链表是空的,所以直接返回另一个链表即可。
之后就是将找到的规律代码化。p->next每次都指向——p->next的数值和另一个链表的当前节点的数值相比较小的那一个节点。

struct Lian*MergeTwoList(node *L1,node *L2)
{
	if(L1==NULL) return L2;
	else if(L2==NULL) return L1;
	else if(L1->a<L2->a)
	{
		L1->next=MergeTwoList(L1->next,L2);//MergeTwoList(L1,L2)返回的是两个里面值比较小的那个节点
		return L1;//MergeTwoList(L1,L2)返回的是
	}
	else
	{
		L2->next=MergeTwoList(L1,L2->next);
		return L2;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值