#include <iostream>
#include <vector>
using namespace std;
struct Node{
int val;
Node * next;
Node(){
next = NULL;
}
};
void print(Node* root);
Node *merge(vector<Node*> &tomerge){
Node * root = NULL;
Node *cur;
int min;
Node **min_node = NULL;
int i=0;
while(tomerge.size()>0){
std::cout<<"-->";
print(tomerge[i]);
if(tomerge[i]==NULL){
tomerge.erase(tomerge.begin()+i);
continue;
}
if(min_node==NULL ||(*min_node)->val>tomerge[i]->val){
min_node = &tomerge[i];
min = i;
}
if (i==(int)tomerge.size()-1){
if(root==NULL){
root = (*min_node);
tomerge[min] = tomerge[min]->next;
cur = root;
}else{
cur->next = (*min_node);
tomerge[min] = tomerge[min]->next;
cur = cur->next;
}
i = 0;
min_node = NULL;
continue;
}
i++;
}
return root;
}
Node *build(vector<int> &r){
Node *root = NULL;
Node *cur;
for(int i=0;i<(int)r.size();i++){
Node *p = (Node *)malloc(sizeof(Node));
p->val = r[i];
p->next = NULL;
if(root==NULL){
root = p;
cur = p;
}else{
cur->next = p;
cur = p;
}
}
return root;
}
void print(Node* root){
while(root!=NULL){
std::cout<<root->val<<" ";
root=root->next;
}
std::cout<<std::endl;
}
int main() {
vector<int>inp_a = {1,2,3,4,7,9};
vector<int>inp_b = {5,11};
Node *a = build(inp_a);
Node *b = build(inp_b);
vector<Node*> tomerge;
tomerge.push_back(a);
tomerge.push_back(b);
Node *c = merge(tomerge);
print(c);
cout << "Hello World!" << endl;
}