合并两个排序链表

    xiaoxiao2021-03-25  96

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    /* 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||!pHead2) return (pHead1==NULL)?pHead2:pHead1; ListNode* prehead=new ListNode(0); ListNode* begin1=pHead1; ListNode* begin2=pHead2; ListNode* cur=prehead; while(begin1&&begin2) { if(begin1->val<=begin2->val) { cur->next=begin1; cur=cur->next; begin1=begin1->next; } else { cur->next=begin2; cur=cur->next; begin2=begin2->next; } } if(!begin1) { cur->next=begin2; } else cur->next=begin1; return prehead->next; } };

    或者直接操作两个链表,思路比较复杂,但是可以有效减少赋值操作。复杂度更低

    * 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||!pHead2) return (pHead1==NULL)?pHead2:pHead1; ListNode* prehead=new ListNode(0); prehead->next=(pHead1->val>pHead2->val)?pHead2:pHead1; ListNode* begin1=prehead->next; ListNode* begin2=(pHead1->val>pHead2->val)?pHead1:pHead2; while(begin1&&begin2) { if(begin1->val<=begin2->val) { if(((begin1->next)&&(begin1->next->val>begin2->val))||!(begin1->next)) { ListNode* temp=begin1->next; begin1->next=begin2; begin1=temp; } else begin1=begin1->next; } else { if(((begin2->next)&&(begin2->next->val>=begin1->val))||!(begin2->next)) { ListNode* temp=begin2->next; begin2->next=begin1; begin2=temp; } else begin2=begin2->next; } } return prehead->next; } };
    转载请注明原文地址: https://ju.6miu.com/read-21926.html

    最新回复(0)