эффективное добавление двух связанных списков в C

У меня есть два связанных списка, представляющих цифры десятичных чисел в порядке от наиболее значимого до наименее значимого. например, для 4-> 7-> 9-> 6 и 5-> 7 Ответ должен быть 4-> 8-> 5-> 3 без переворачивания списков, потому что реверсирование списков приведет к снижению эффективности.

Я подумываю решить проблему с помощью стека. Я буду перемещаюсь по обоим спискам и помещаю элементы данных в два отдельных стека. по одному для каждого связанного списка. Затем я складываю оба стека вместе и складываю оба элемента, и если результатом является двузначное число нет I 10 по модулю, и сохраняю перенос в временная переменная. Остаток сохраняется в узле, перенос добавляется к следующей сумме и так далее. если два стека - s1 и s2, а связанный список результатов - 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; 

Я сталкивался с этой проблемой много раз в вопросах интервью, но это лучшее решение, которое я мог придумать. Если кто-нибудь сможет предложить что-то более эффективное в c, я буду очень рад.

7
задан R.. 5 August 2011 в 18:54
поделиться