使用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 (将#修改为@)