首页 > 代码库 > 合并两个排序链表

合并两个排序链表

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
 
思路:非递归
 
class Solution { 
  public: 
      ListNode* Merge(ListNode* pHead1, ListNode* pHead2) 
      { 
          if(!pHead1) 
              return pHead2; 
          if(!pHead2) 
              return pHead1; 
          ListNode* Head; 
          ListNode* p; 
          //取较小值作头结点 
          if(pHead1->val<=pHead2->val){ 
              Head=pHead1; 
              pHead1=pHead1->next; 
          } 
          else{ 
              Head=pHead2; 
              pHead2=pHead2->next; 
          }   
          //开始遍历合并 
          p=Head;  //p为合并后的链表的工作指针 
          while(pHead1&&pHead2){    //当有一个链表到结尾时,循环结束 
              if(pHead1->val<=pHead2->val){         //如果链表1的结点小于链表2的结点 
                  p->next=pHead1;                  //取这个结点加入合并链表 
                  pHead1=pHead1->next;            //链表1后移一位 
                  p=p->next;                    //工作指针后移一位 
              }                
              else{                           //否则取链表2的结点

                  p->next=pHead2; 
                  pHead2=pHead2->next; 
                  p=p->next; 
              }                 
          } 
          if(pHead1 == NULL)           //链表1遍历完了 
              p->next = pHead2;        //如果链表2也遍历完了,则pHead2=NULL 
          if(pHead2 == NULL)            //链表2遍历完了 
              p->next = pHead1;         ///如果链表1也遍历完了,则pHead1=NULL

          return Head; 
      } 
  };

  

思路:递归算法。

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if(!pHead1) return pHead2;
        if(!pHead2)	return pHead1;
        if(pHead1->val <= pHead2->val) {
            pHead1->next= Merge(pHead1->next,pHead2);
            return pHead1;
        }
        else {
            pHead2->next = Merge(pHead1,pHead2->next);
            return pHead2;
        }
        
    }
};

  

https://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337

合并两个排序链表