/*
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;
};
void printList(ListNode *& header){
if (header == NULL){
return;
}
ListNode* node = header ;
while (node != NULL ){
printf( "%d ", node->val);
node = node->next;
}
printf( "\n");
}
void createList(ListNode *& header, int * array , int len){
header = (ListNode *)malloc(sizeof( ListNode));
ListNode* tailer = header ;
ListNode* tempNode = NULL ;
ListNode* pre = header ;
for (int i = 0; i < len; i++){
tailer->val = *( array+i);
pre = tailer;
tempNode = ( ListNode*)malloc(sizeof (ListNode));
tailer->next = tempNode;
tailer = tempNode;
}
pre ->next= NULL;
}
ListNode* addTwoNumbers( ListNode* l1 , ListNode* l2) {
if (l1 == NULL){
return l2 ;
}
if (l2 == NULL){
return l1 ;
}
ListNode* header = (ListNode *)malloc(sizeof( ListNode));
ListNode* tailer = header;
ListNode* tempNode = NULL ;
ListNode* pre = header;
int isIncress = 0;
while (l1 != NULL && l2 != NULL ){
int value = l1 ->val + l2->val;
if (isIncress){
value += 1;
isIncress = 0;
}
if (value >= 10) {
value = value % 10;
isIncress = 1;
}
tailer->val = value;
pre = tailer;
tempNode = ( ListNode*)malloc(sizeof (ListNode));
tailer->next = tempNode;
tailer = tempNode;
l1 = l1 ->next;
l2 = l2 ->next;
}
if (l1 == NULL && l2 == NULL && isIncress){
tailer->val = 1;
pre = tailer;
tempNode = ( ListNode*)malloc(sizeof (ListNode));
tailer->next = tempNode;
tailer = tempNode;
isIncress = 0;
}
while (l1 != NULL){
int value = l1 ->val;
if (isIncress){
value += 1;
isIncress = 0;
}
if (value >= 10) {
value = value % 10;
isIncress = 1;
}
tailer->val = value;
pre = tailer;
tempNode = ( ListNode*)malloc(sizeof (ListNode));
tailer->next = tempNode;
tailer = tempNode;
l1 = l1 ->next;
}
while (l2 != NULL){
int value = l2 ->val;
if (isIncress){
value += 1;
isIncress = 0;
}
if (value >= 10) {
value = value % 10;
isIncress = 1;
}
tailer->val = value;
pre = tailer;
tempNode = ( ListNode*)malloc(sizeof (ListNode));
tailer->next = tempNode;
tailer = tempNode;
l2 = l2 ->next;
}
if (isIncress){
tailer->val = 1;
pre = tailer;
tempNode = ( ListNode*)malloc(sizeof (ListNode));
tailer->next = tempNode;
tailer = tempNode;
}
pre ->next= NULL;
return header;
}
int main(){
int array1[1] = { 1 };
int array2[2] = { 9,9 };
ListNode * h1 = NULL ;
ListNode * h2 = NULL ;
createList(h1, array1, 1);
createList(h2, array2, 2);
printList(h1);
printList(h2);
ListNode* result = addTwoNumbers(h1, h2);
printList(result);
printf( "Hello world \n");
return 0;
}
2,Add Two Number (LinkList Math)
最新推荐文章于 2024-06-22 21:53:36 发布