#include<stdio.h>
#include<stdlib.h>
/* Linked list node */
struct node
{
int data;
struct node* next;
};
/* Function to create a new node with given data */
struct node *newNode(int data)
{
struct node
*new_node
= (struct node
*) malloc(sizeof(struct node
)); new_node->data = data;
new_node->next = NULL;
return new_node;
}
/* Function to insert a node at the beginning of the Doubly Linked List */
void push(struct node** head_ref, int new_data)
{
/* allocate node */
struct node* new_node = newNode(new_data);
/* link the old list off the new node */
new_node->next = (*head_ref);
/* move the head to point to the new node */
(*head_ref) = new_node;
}
/* Multiply contents of two linked lists */
long multiplyTwoLists (struct node* first, struct node* second)
{
int num1 = 0, num2 = 0;
while (first || second)
{
if(first){
num1 = num1*10 + first->data;
first = first->next;
}
if(second)
{
num2 = num2*10 + second->data;
second = second->next;
}
}
return num1*num2;
}
// A utility function to print a linked list
void printList(struct node *node)
{
while(node != NULL)
{
node = node->next;
}
}
/* Driver program to test above function */
int main(void)
{
struct node* first = NULL;
struct node* second = NULL;
// create first list 7->5->9
push(&first, 6);
push(&first, 4);
push(&first, 9);
printList(first);
// create second list 8->4
push(&second, 4);
push(&second, 8);
printList(second);
// Multiply the two lists and see result
printf("%d", multiplyTwoLists
(first
, second
));
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgovKiBMaW5rZWQgbGlzdCBub2RlICovCnN0cnVjdCBub2RlCnsKCWludCBkYXRhOwoJc3RydWN0IG5vZGUqIG5leHQ7Cn07CgovKiBGdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgbm9kZSB3aXRoIGdpdmVuIGRhdGEgKi8Kc3RydWN0IG5vZGUgKm5ld05vZGUoaW50IGRhdGEpCnsKCXN0cnVjdCBub2RlICpuZXdfbm9kZSA9IChzdHJ1Y3Qgbm9kZSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgluZXdfbm9kZS0+ZGF0YSA9IGRhdGE7CgluZXdfbm9kZS0+bmV4dCA9IE5VTEw7CglyZXR1cm4gbmV3X25vZGU7Cn0KCi8qIEZ1bmN0aW9uIHRvIGluc2VydCBhIG5vZGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRG91Ymx5IExpbmtlZCBMaXN0ICovCnZvaWQgcHVzaChzdHJ1Y3Qgbm9kZSoqIGhlYWRfcmVmLCBpbnQgbmV3X2RhdGEpCnsKCS8qIGFsbG9jYXRlIG5vZGUgKi8KCXN0cnVjdCBub2RlKiBuZXdfbm9kZSA9IG5ld05vZGUobmV3X2RhdGEpOwoKCS8qIGxpbmsgdGhlIG9sZCBsaXN0IG9mZiB0aGUgbmV3IG5vZGUgKi8KCW5ld19ub2RlLT5uZXh0ID0gKCpoZWFkX3JlZik7CgoJLyogbW92ZSB0aGUgaGVhZCB0byBwb2ludCB0byB0aGUgbmV3IG5vZGUgKi8KCSgqaGVhZF9yZWYpID0gbmV3X25vZGU7Cn0KCi8qIE11bHRpcGx5IGNvbnRlbnRzIG9mIHR3byBsaW5rZWQgbGlzdHMgKi8KbG9uZyBtdWx0aXBseVR3b0xpc3RzIChzdHJ1Y3Qgbm9kZSogZmlyc3QsIHN0cnVjdCBub2RlKiBzZWNvbmQpCnsKCWludCBudW0xID0gMCwgbnVtMiA9IDA7Cgl3aGlsZSAoZmlyc3QgfHwgc2Vjb25kKQoJewoJCWlmKGZpcnN0KXsKCQkJbnVtMSA9IG51bTEqMTAgKyBmaXJzdC0+ZGF0YTsKCQkJZmlyc3QgPSBmaXJzdC0+bmV4dDsKCQl9CgkJaWYoc2Vjb25kKQoJCXsKCQkJbnVtMiA9IG51bTIqMTAgKyBzZWNvbmQtPmRhdGE7CgkJCXNlY29uZCA9IHNlY29uZC0+bmV4dDsKCQl9Cgl9CgoKCXJldHVybiBudW0xKm51bTI7Cn0KCi8vIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBwcmludCBhIGxpbmtlZCBsaXN0CnZvaWQgcHJpbnRMaXN0KHN0cnVjdCBub2RlICpub2RlKQp7Cgl3aGlsZShub2RlICE9IE5VTEwpCgl7CgkJcHJpbnRmKCIlZCAiLCBub2RlLT5kYXRhKTsKCQlub2RlID0gbm9kZS0+bmV4dDsKCX0KCXByaW50ZigiXG4iKTsKfQoKLyogRHJpdmVyIHByb2dyYW0gdG8gdGVzdCBhYm92ZSBmdW5jdGlvbiAqLwppbnQgbWFpbih2b2lkKQp7CglzdHJ1Y3Qgbm9kZSogZmlyc3QgPSBOVUxMOwoJc3RydWN0IG5vZGUqIHNlY29uZCA9IE5VTEw7CgoJLy8gY3JlYXRlIGZpcnN0IGxpc3QgNy0+NS0+OQoJcHVzaCgmZmlyc3QsIDYpOwoJcHVzaCgmZmlyc3QsIDQpOwoJcHVzaCgmZmlyc3QsIDkpOwoJcHJpbnRmKCJGaXJzdCBMaXN0IGlzICIpOwoJcHJpbnRMaXN0KGZpcnN0KTsKCgkvLyBjcmVhdGUgc2Vjb25kIGxpc3QgOC0+NAoJcHVzaCgmc2Vjb25kLCA0KTsKCXB1c2goJnNlY29uZCwgOCk7CglwcmludGYoIlNlY29uZCBMaXN0IGlzICIpOwoJcHJpbnRMaXN0KHNlY29uZCk7CgoJLy8gTXVsdGlwbHkgdGhlIHR3byBsaXN0cyBhbmQgc2VlIHJlc3VsdAoJcHJpbnRmKCJSZXN1bHQgaXMgIik7CglwcmludGYoIiVkIiwgbXVsdGlwbHlUd29MaXN0cyhmaXJzdCwgc2Vjb25kKSk7CgoJcmV0dXJuIDA7Cn0=