微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用multimap合并C++链表

如何解决使用multimap合并C++链表


/**
 * DeFinition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0),next(nullptr) {}
 *     ListNode(int x) : val(x),next(nullptr) {}
 *     ListNode(int x,ListNode *next) : val(x),next(next) {}
 * };
 */

 ListNode* mergeTwoLists(ListNode* l1,ListNode* l2) {
        ListNode* h1=l1;
        ListNode* h2=l2;
        ListNode* nodes=new ListNode();
       ListNode* ret=nodes;
        int i=0;
        multimap<int,ListNode*> sorted;
        while(h1!=nullptr || h2!=nullptr){           
            if(h1!=nullptr)
            {
                sorted.insert({h1->val,h1});
                h1=h1->next;
            }    
            if(h2!=nullptr)
            {
                sorted.insert({h2->val,h2});
                h2=h2->next;
            }
            i++;
        }
        for (auto itr = sorted.begin(); itr != sorted.end(); itr++){
            if(++itr==sorted.end()){
                itr--;
                nodes->val=itr->first;
                
            }
            nodes->val=itr->first;
            nodes->next=new ListNode();
            nodes=nodes->next;
        }
        
        return ret;
    }

您的输入:l1= [1,2,4] l2= [1,3,4]

输出 [1,4] 预期的 [1,1,4,4]

如果我注释掉标记的行

ListNode* mergeTwoLists(ListNode* l1,ListNode* l2) {
        ListNode* h1=l1;
        ListNode* h2=l2;
        ListNode* nodes=new ListNode();
       ListNode* ret=nodes;
        multimap<int,h2});
                h2=h2->next;
            }   
        }
        for (auto itr = sorted.begin(); itr != sorted.end(); itr++){
            //changhes here 
            nodes->val=itr->first;
            nodes->next=new ListNode();
            nodes=nodes->next;
        }
        
        return ret;
    }

您的输入:l1= [1,4]

        l2= [1,4]

输出 [1,0] 预期 [1,4]

我知道,最后一个零是由最后一次迭代引起的。为了解决这个问题,我尝试了上述 hack,但它提供了所有其他输出。请帮忙。 Multimap 允许重复值,那么为什么会出现这种意外行为

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。