Link * merge(Link * A, Link * B)
{ Link * first = NULL, * last = NULL;
  while (A!=NULL && B!=NULL)
  { Link * wanted;
    if (A->data < B->data)
    { wanted = A;
      A = A->next; }
    else
    { wanted = B;
      B = B->next; }
    if (first == NULL)
      first = wanted;
    else
      last->next = wanted;
    last = wanted;
    last->next = NULL; }
  if (A != NULL)
    last->next = A;
  else if (B != NULL)
    last->next = B;
  return first; }