题目2:
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
#include <stdlib.h>
#include <stdio.h>
struct ListNode
{
int val;
struct ListNode *next;
};
long long int ListToValue(struct ListNode* l)
{
long long int value = 0;
long long int i = 1;
while (l != NULL)
{
value += (long long int)(l->val * i);
i = i * 10;
l = l->next;
}
return value;
}
struct ListNode* ValueToList(long long int value)
{
int temp = 0;
struct ListNode* sum_list = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* temp_node = NULL;
struct ListNode* pre = NULL;
pre = sum_list;
if (value == 0)
{
temp_node = (struct ListNode*)malloc(sizeof(struct ListNode));
temp_node->val = 0;
temp_node->next = NULL;
return temp_node;
}
while (value != 0)
{
temp = value % 10;
value = (value - temp) / 10;
temp_node = (struct ListNode*)malloc(sizeof(struct ListNode));
temp_node->val = temp;
temp_node ->next = NULL;
pre->next = temp_node;
pre = temp_node;
}
return sum_list->next;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* res = NULL;
long long int a = 0;
long long int b = 0;
long long int sum = 0;
a = ListToValue(l1);
b = ListToValue(l2);
sum = a + b;
res = ValueToList(sum);
return res;
}
void main()
{
struct ListNode* res = NULL;
long long int value = 9999999991;
long long int trans_value = 0;
res = ValueToList(value);
trans_value = ListToValue(res);
}