/** * struct ListNode { * int val; * struct ListNode *next; * }; * * C语言声明定义全局变量请加上static,防止重复定义 */ /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ /* 1.先将链表进行反转,然后按每个节点进行计算 */ struct ListNode* ReverseList(struct ListNode* pHead){ struct ListNode* tmp = NULL; struct ListNode* save = NULL; struct ListNode* ReverseList = pHead; struct ListNode* p = pHead; if(pHead == NULL) return pHead; while(p != NULL){ save = p->next; p->next = tmp; tmp = p; p = save; } ReverseList = tmp; return ReverseList; } // struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) { // // write code here // struct ListNode* Head; // struct ListNode* L1 = head1; // struct ListNode* L2 = head2; // struct ListNode* p = L1; // struct ListNode* q = L2; // struct ListNode* s; // struct ListNode* tmp = NULL; // int remainder = 0; // int p_val = 0; // int q_val = 0; // if(head1 == NULL && head2 != NULL) // return head2; // if(head2 == NULL && head1 != NULL) // return head1; // L1 = ReverseList(head1); // L2 = ReverseList(head2); // p = L1; // q = L2; // /*头插法 创建节点*/ // while(p != NULL || q != NULL){ // /* 创建节点并为该节点赋值*/ // remainder = 0; //remainder 用来存放进位数据 // if(p != NULL){ // remainder += p->val; // p = p->next; // } // if(q != NULL){ // remainder += q->val; // q = q->next; // } // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // s->val = 0; // s->next = NULL; // // if(p->val + q->val +remainder> 10){ // // remainder = 1; // // //s->val = (p->val + q->val)%10; // // } // // if((p->val + q->val + remainder)%10 == 0){ // // remainder = 1; // // s->val = 0; // // } // // if((p->val + q->val + remainder) < 10){ // // remainder = 0; // // s->val = p->val + q->val + remainder; // // } // // s->next = tmp; // // tmp = s; // // p = p->next; // // q = q->next; // // } // // /* 如果p->next 或者 q->next有一个 == NULL*/ // // if(p->val + q->val + remainder >= 10){ // // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // // s->val = (p->val + q->val + remainder)%10; // // s->next = tmp; // // tmp = s; // // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // // s->val = 1; // // s->next = tmp; // // tmp = s; // // } // // while(p != NULL || q != NULL){ // // if(p->val + q->val + remainder < 10){ // // if(p->next != NULL || q->next != NULL || p != NULL || q != NULL){ // // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // // s->val = (p->val + q->val + remainder) %10; // // s->next = tmp; // // tmp = s; // // } // // } // // if(p->val + q->val + remainder == 10){ //如果节点相加大于10, remainder = 1 // // if(p->next != NULL || q->next != NULL || p != NULL || q != NULL){ // // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // // s->val = (p->val + q->val + remainder) %10; // // s->next = tmp; // // tmp = s; // // } // // remainder = 1; // // p = p->next; // // q = q->next; // //求出进位 // remainder = // } // Head = tmp; // return Head; // } struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) { // write code here struct ListNode* Head; struct ListNode* L1 = head1; struct ListNode* L2 = head2; struct ListNode* p = L1; struct ListNode* q = L2; struct ListNode* s; struct ListNode* NewHead ; struct ListNode* TempNode; int remainder = 0; int p_val = 0; int q_val = 0; if(head1 == NULL && head2 != NULL) return head2; if(head2 == NULL && head1 != NULL) return head1; L1 = ReverseList(head1); L2 = ReverseList(head2); p = L1; q = L2; /*头插法 创建节点*/ int tmp = 0; NewHead = (struct ListNode*)malloc(sizeof(struct ListNode)); TempNode = NewHead; while(p != NULL || q != NULL){ /* 创建节点并为该节点赋值*/ //remainder用来累加此时的数值(加数+加数+上一位的进位) int remainder = tmp; //当节点不为空的时候,则需要加上当前节点的值 if(p != NULL){ remainder += p->val; p = p->next; } if(q != NULL){ remainder += q->val; q = q->next; } //求出进位 tmp = remainder/10; //进位后剩下的数值即为当前节点的数值 s = (struct ListNode*)malloc(sizeof(struct ListNode)); s->val = remainder%10; TempNode->next = s; TempNode = s; } //最后当两条链表都加完的时候,进位不为0的时候,则需要再加上这个进位 if(tmp > 0){ s = (struct ListNode*)malloc(sizeof(struct ListNode)); } //重新翻转链表 TempNode = NewHead; NewHead = NewHead->next; TempNode->next = NULL; free(TempNode); NewHead = ReverseList(NewHead); return NewHead; // if(p->val + q->val +remainder> 10){ // remainder = 1; // //s->val = (p->val + q->val)%10; // } // if((p->val + q->val + remainder)%10 == 0){ // remainder = 1; // s->val = 0; // } // if((p->val + q->val + remainder) < 10){ // remainder = 0; // s->val = p->val + q->val + remainder; // } // s->next = tmp; // tmp = s; // p = p->next; // q = q->next; // } // /* 如果p->next 或者 q->next有一个 == NULL*/ // if(p->val + q->val + remainder >= 10){ // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // s->val = (p->val + q->val + remainder)%10; // s->next = tmp; // tmp = s; // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // s->val = 1; // s->next = tmp; // tmp = s; // } // while(p != NULL || q != NULL){ // if(p->val + q->val + remainder < 10){ // if(p->next != NULL || q->next != NULL || p != NULL || q != NULL){ // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // s->val = (p->val + q->val + remainder) %10; // s->next = tmp; // tmp = s; // } // } // if(p->val + q->val + remainder == 10){ //如果节点相加大于10, remainder = 1 // if(p->next != NULL || q->next != NULL || p != NULL || q != NULL){ // s = (struct ListNode*)malloc(sizeof(struct ListNode)); // s->val = (p->val + q->val + remainder) %10; // s->next = tmp; // tmp = s; // } // remainder = 1; // p = p->next; // q = q->next; // } // Head = tmp; // return Head; }