链表------合并两个排序的链表

来源:互联网 发布:android java 编辑:程序博客网 时间:2024/06/03 07:39
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->val<index1->val){              last=index2->next;              pre->next=index2;              index2->next=index1;              pre=index2;              index2=last;          }          else          {              pre=index1;              index1=index1->next;          }        }        pre->next=index2;        return list;    }
0 0
原创粉丝点击