Is this an effective way for merging two lists? It seemed too long.
struct Node {
int item;
Node *next;
};
Method:
Node* mergeTwo(Node* headA, Node* headB)
{
Node* currentA = headA;
Node* currentB = headB;
Node* headC = NULL;
Node* currentC = NULL;
while (currentA != NULL && currentB != NULL)
{
if (currentA->item < currentB->item)
{
Node* node = new Node();
node->item = currentA->item;
node->next = NULL;
if (headC == NULL)
headC = node;
else
currentC->next = node;
// update currents
currentC = node;
currentA = currentA->next;
}
else // currentB->item < currentA->item
{
Node* node = new Node();
node->item = currentB->item;
node->next = NULL;
if (headC == NULL)
headC = node;
else
currentC->next = node;
// update currents
currentC = node;
currentB = currentB->next;
}
}
// one of currentA or currentB will not be NULL
while (currentA != NULL)
{
Node* node = new Node();
node->item = currentA->item;
node->next = NULL;
// in case like: A={13,15}, B={4,6}
if (headC == NULL)
headC = node;
else
currentC->next = node;
// update currents
currentC = node;
currentA = currentA->next;
}
while (currentB != NULL)
{
Node* node = new Node();
node->item = currentB->item;
node->next = NULL;
// in case like: A={3,5}, B={7,8}
if (headC == NULL)
headC = node;
else
currentC->next = node;
// update currents
currentC = node;
currentB = currentB->next;
}
return headC;
}