2,Add Two Number (LinkList Math)

来源:互联网 发布:js代码反混淆 编辑:程序博客网 时间:2024/06/08 10:32
/*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;}
0 0
原创粉丝点击