zoukankan      html  css  js  c++  java
  • 每天一道算法题(16)——合并已排序的链表

    题目

       合并已经排序的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;	   
    }





  • 相关阅读:
    [总结]并查集
    一些麻烦的语法知识
    P1496 找筷子
    P1314 [NOIP2011 提高组] 聪明的质监员
    HDU 1232 -畅通工程(并查集)
    POJ 1611 -The Suspects (并查集)
    方框(HPU暑期第四次积分赛)
    HDU 2191
    B
    HDU 1009
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393021.html
Copyright © 2011-2022 走看看