类似加法计算,进位,用链表存储
struct Node
{
int value;
Node* next;
Node()
{
value = 0;
next = NULL;
}
Node* AddNode(Node* curNode, int iv)
{
Node* node = new Node();
node->value = iv;
node->next = NULL;
curNode->next = node;
return curNode->next;
}
void Print(Node* head)
{
Node* curNode = head->next;
while(curNode)
{
printf("value=%d \n", curNode->value);
curNode = curNode->next;
}
}
};
void AddSum(Node* head1, Node* head2, Node* headsum)
{
Node* n1 = head1->next;
Node* n2 = head2->next;
bool isJw = false;
while(n1 && n2)
{
Node* node = new Node();
node->value = n1->value + n2->value;
if (isJw) node->value += 1;
if(node->value > 9)
{
node->value = 0;
isJw = true;
}
else
{
isJw = false;
}
node->next = NULL;
headsum->next = node;
headsum = headsum->next;
n1 = n1->next;
n2 = n2->next;
}
while(n1)
{
Node* node = new Node();
node->value = n1->value;
node->next = NULL;
headsum->next = node;
headsum = headsum->next;
n1 = n1->next;
}
while(n2)
{
Node* node = new Node();
node->value = n2->value;
node->next = NULL;
headsum->next = node;
headsum = headsum->next;
n2 = n2->next;
}
}
int main()
{
Node *head1 = new Node();
Node *head2 = new Node();
Node* node1 = head1;
node1 = head1->AddNode(node1, 2);
node1 = head1->AddNode(node1, 4);
node1 = head1->AddNode(node1, 3);
head1->Print(head1);
Node* node2 = head2;
node2 = head2->AddNode(node2, 5);
node2 = head2->AddNode(node2, 6);
node2 = head2->AddNode(node2, 4);
head2->Print(head2);
Node* headsum = new Node();
AddSum(head1, head2, headsum);
headsum->Print(headsum);
return 0;
}