两数相加
Posted olajennings
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两数相加相关的知识,希望对你有一定的参考价值。
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
这里的逆序有点误导人。题目的意思是,243和564相加,加的时候是从左边开始的,并且进位是进到右边去的。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { // l1 = reverseList(l1); // l2 = reverseList(l2); ListNode *p = l1; ListNode *q = l2; ListNode *head = new ListNode(0); ListNode *tail = head; int sum = 0; int x = 0; int y = 0; while(!(p == NULL && q == NULL)){ if(p == NULL){ x = 0; } else{ x = p->val; p = p->next; } if(q == NULL){ y = 0; } else{ y = q->val; q = q->next; } sum = sum + x + y; if(sum < 10){ tail->next = new ListNode(sum); sum = 0; } else{ tail->next = new ListNode(sum-10); sum = 1; } tail = tail->next; } if(sum != 0){ tail->next = new ListNode(sum); tail = tail->next; } return head->next; } // ListNode* reverseList(ListNode *head){ // if(head == NULL || head->next == NULL){ // return head; // } // ListNode *p = head; // ListNode *q = p->next; // while(q != NULL){ // p->next = q->next; // q->next = head; // head = q; // q = p->next; // } // return head; // } };
以上是关于两数相加的主要内容,如果未能解决你的问题,请参考以下文章