मैं समस्या को हल करने के लिए ढेर का उपयोग करने की कोशिश कर रहा हूं "के सूचियों को विलय करें" जो कि क्रमबद्ध लिंक्ड सूचियों को विलय कर रहा है और इसे एक क्रमबद्ध सूची के रूप में वापस कर रहा है। आम तौर पर मैं सभी सूची नोड को स्टोर करने के लिए एक न्यूनतम ढेर बना देता हूं और तुलना के लिए पूर्वनिर्धारित कार्य LessThanLinkedList() का उपयोग करता हूं। लेकिन मुझे लाइन 62 और 75 में pop_heap() ऑपरेशन कभी नहीं मिला। यह ढेर के शीर्ष को नहीं हटाएगा, हालांकि मैंने पूर्वनिर्धारित तुलना फ़ंक्शन को पैरामीटर के रूप में उपयोग किया था। निम्नलिखित मेरा कोड है। मैं आईडीई के रूप में विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं। किसी को कारण पता है? आपकी सहायता के लिए धन्यवाद!सी ++ एसटीएल pop_heap काम नहीं करता
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <list>
#include <numeric>
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
using namespace std;
class Solution {
public:
static bool LessThanLinkedList(const ListNode * l1, const ListNode * l2)
{
return(l1->val > l2->val);
}
ListNode *mergeKLists(vector<ListNode *> &lists) {
int idx;
bool ball_list_null;
ListNode * pNode;
ListNode *new_head;
ball_list_null = true;
for(idx = 0; idx < lists.size(); idx++)
{
if(NULL != lists[idx])
{
ball_list_null = false;
break;
}
}
if(true == ball_list_null)
return(NULL);
vector< ListNode* > list_heap;
for(idx = 0; idx < lists.size(); idx++)
{
if(NULL != lists[idx])
{
pNode = lists[idx];
while(NULL != pNode)
{
list_heap.push_back(pNode);
pNode = pNode->next;
}
}
}
make_heap(list_heap.begin(), list_heap.end(), LessThanLinkedList);
if(list_heap.size() > 0)
{
new_head = list_heap[0];
pop_heap(list_heap.begin(), list_heap.end(), LessThanLinkedList);//not work
}
if(list_heap.size() == 0)
{
new_head->next = NULL;
}
else
{
pNode = new_head;
while(list_heap.size() >0)
{
pNode->next = list_heap[0];
pop_heap(list_heap.begin(), list_heap.end(), LessThanLinkedList); // not work
pNode = pNode->next ;
}
pNode->next = NULL;
}
return(new_head);
}
};
void main()
{
Solution xpfsln;
ListNode *l1,*l2,*l3,*l4,*l5,*l6,*l7,*head;
l1 = new ListNode(1);
l2 = new ListNode(2);
l3 = new ListNode(3);
l1->next = l2;
l2->next = l3;
l3->next = NULL;
vector<ListNode *> list_vec;
list_vec.push_back(l1);
head = xpfsln.mergeKLists(list_vec);
}
धन्यवाद बहुत, बहुत मूल्यवान उत्तर। ऐसा लगता है कि यह मूल स्टैक पॉप फ़ंक्शन के समान नहीं है। मैं डिजाइन सुविधा को समझ सकता हूं, लेकिन कुछ असंगतता ला सकता हूं। – flashstar