【链表】合并两个排序的链表

First

------ 递归思路,需要重新创建一个链表,空间复杂度O(1)

    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if(pHead1==nullptr) return pHead2;
        if(pHead2==nullptr) return pHead1;
        ListNode* list;
        if(pHead1->val>pHead2->val){
            list=pHead2;
            list->next=Merge(pHead1,pHead2->next);
        }
        else{
            list=pHead1;
            list->next=Merge(pHead1->next,pHead2);
        } 
        return list;
    }

 

Second

------ 非递归思路,直接在两个链表上修改

ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if(pHead1==nullptr) return pHead2;
        if(pHead2==nullptr) return pHead1;
        ListNode* list=pHead1;
        ListNode* index1=pHead1,*index2=pHead2,*pre=pHead1,*last;   
        if(pHead1->val>pHead2->val){
			list=pHead2;
            pre=index2;
            index2=index2->next;
        }
        else index1=index1->next;
        while(index1!=nullptr&&index2!=nullptr){
            
          if(index2->valval){
              last=index2->next;
              pre->next=index2;
              index2->next=index1;
              pre=index2;
              index2=last;
          }
          else
          {
              pre=index1;
              index1=index1->next;
          }
        }
        pre->next=index2;
        return list;
    }

你可能感兴趣的:(algorithm)