标签:
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<stdio.h> #include<stdlib.h> typedef struct ListNode { int val; struct ListNode *next; }ListNode; ListNode *addTowNumbers(ListNode *l1, ListNode *l2) { ListNode *p1 = l1, *p2 = l2, *head; int data = 0, carry = 0, i = 1, j = 1; int data1 = 0, data2 = 0; if(l1 == NULL && l2 == NULL) return NULL; head = p1 = p2 =(ListNode *)malloc(sizeof(ListNode)); while(l1 != NULL || l2 != NULL || carry == 1) { p2->next = p1; p2 = p1; if(l1 != NULL) { data1 = l1->val; l1 = l1->next; } else data1 = 0; if(l2 != NULL) { data2 = l2->val; l2 = l2->next; } else data2 = 0; data = data1 + data2 + carry; if(data >9) carry = 1; else carry = 0; p1->val = data%10; p1 =(ListNode *)malloc(sizeof(ListNode)); } p2->next = NULL; return head; } void main() { int data,n=0; ListNode *head,*head1,*p1,*head2,*p2,*p3; p1=p2=(ListNode *)malloc(sizeof(ListNode)); scanf("%d",&data); p1->val=data; head1=NULL; while(data!=0){ n++; if(n==1) head1=p1; else p2->next=p1; p2=p1; p1=(ListNode *)malloc(sizeof(ListNode)); scanf("%d",&data); p1->val=data; } p2->next=NULL; p1=p2=(ListNode *)malloc(sizeof(ListNode)); scanf("%d",&data); p1->val=data; head2=NULL; n=0; while(data!=0){ n++; if(n==1) head2=p1; else p2->next=p1; p2=p1; p1=(ListNode *)malloc(sizeof(ListNode*)); scanf("%d",&data); p1->val=data; } p2->next=NULL; p1=head1; p2=head2; while(p1) {printf("%d,",p1->val);p1=p1->next;} while(p2) {printf("%d,",p2->val);p2=p2->next;} head = addTowNumbers(head1, head2); p3 = head; while(p3) {printf("%d,",p3->val);p3=p3->next;} printf("\n"); }
标签:
原文地址:http://blog.csdn.net/uj_mosquito/article/details/42291413