每天一道算法题(16)——合并已排序的链表

本文介绍了一种合并两个已排序链表的方法,包括递归和非递归两种实现方式。通过对比选择合适的节点,并进行节点连接,最终得到一个有序的新链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

   合并已经排序的2条链表

思路

   递归策略:对于每一层递归,寻找最小的节点,然后嵌套递归

   非递归:定义两个指针,初始化指向头结点,比较指针并移动节点指向

代码

   非递归

ListNode* mergeList(ListNode* List1,ListNode* List2)
{
	  if(!List1)
	      return List2;
      if(!List2)
          return List1;
	
	  ListNode* head=NULL;
	  ListNode* tail=NULL;
	  while(List1||List2){
	       if(List1->value<List2->value||!List2){//还有list2已经为空的情况
		           tail->next=List1;
				   tail=tail->next;
				   List1=List1->next;
		   }
		   else{
		      		   tail->next=List2;
				   tail=tail->next;
				   List2=List2->next;
		   }
		   if(!head)
		        head=tail;
	}
	return head;	   
}

   递归:

ListNode* mergeList(ListNode* List1,ListNode* List2)
{
	  if(!List1)
	      return List2;
          if(!List2)
              return List1;
	
	  ListNode* head=NULL;
	  if(List1->value<List2->value){
		    head=List1;
		    head->next=mergeList(List1->next,List2);
	  }
	  else{
	 	   head=List2;
		    head->next=mergeList(List1,List2->next);
	  }
	  return head;	   
}





转载于:https://www.cnblogs.com/engineerLF/p/5393021.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值