adición de dos listas vinculadas de manera eficiente en C

Tengo dos listas vinculadas que representan los dígitos de los números decimales en orden de mayor a menor importancia. por ejemplo4->7->9->6 y5->7 La respuesta debería ser4->8->5->3 sin invertir las listas porque invertir las listas daría como resultado una disminución de la eficiencia.

Estoy pensando en resolver el problema usando stack. Recorreré ambas listas y empujaré los elementos de datos en dos pilas separadas. Una para cada lista enlazada. Luego junto ambas pilas y agrego ambos elementos y si el resultado es un dos dígitos no I 10 lo modula y almacena el carry en una variable temporal. El resto se almacena en el nodo y el carry se agrega a la siguiente suma y así sucesivamente. si las dos pilas son s1 y s2 y la lista vinculada de resultados es res.

temp = 0;
res = (node*)(malloc(sizeof(node*));

while(s1->top!=-1 || s2->top!=-1)
{  
    temp = 0;
    sum = pop(s1) + pop(s2);
    n1 = (node*)(malloc(sizeof(node*));
    temp = sum/10;
    sum = sum%10;
    sum = sum+temp;
    n1->data = sum;
    n1->next = res;
    res = n1;
    free n1;
    //temp=0;
}

if((s1->top==-1)&&(s2->top==-1))
{
    return res;
}
else if(s1->top==-1)
{
    while(s2->top!=-1)
    {
        temp = 0;
        sum = pop(s2);
        sum = sum + temp;
        temp = sum/10;
        sum = sum%10;
        n1 = (node*)(malloc(sizeof(node*));
        n1->data = sum;
        n1->next = res;
        res = n1;
        free n1;
    }
}
else
{
    while(s2->top!=-1)
    {
        temp = 0;
        sum = pop(s2);
        sum = sum+temp;
        temp = sum/10;
        sum = sum%10;
        n1=(node*)(malloc(sizeof(node*));
        n1->data = sum;
        n1->next = res;
        res = n1;
        free n1;
    }
}

return res; 

Me he encontrado con este problema muchas veces en las preguntas de la entrevista, pero esta es la mejor solución que se me ocurre. Si alguien puede venir con algo más eficiente en c, me alegraré mucho.

Respuestas a la pregunta(5)

Su respuesta a la pregunta