同步发于 JuzerTech 网站,里面有我软、硬件学习的纪录与科技产品开箱,欢迎进去观看。
题目为给定两个链表 ( Link List ),进行加法,回传他们计算后的值(同样以链表 ( Link List ) 回传),数字由左而右依序进位。
题目如下
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example 1:
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
Example 2:
Input: l1 = [0], l2 = [0]
Output: [0]
Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]
我采用的策略为,在较长的链表 ( Link List )进行计算,结束后直接回传该链表 ( Link List ),以减少内存 ( memory ) 的使用量。
代码如下所示
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *mainptr, *optr, *run;
int carry = 0;
if( CountList(l1) > CountList(l2) ){
mainptr = l1;
optr = l2;
}
else{
mainptr = l2;
optr = l1;
}
run = mainptr;
while(optr != NULL || carry!=0){
if(optr != NULL){
carry += optr->val;
optr = optr->next;
}
if(run != NULL){
carry += run->val;
run->val = carry % 10;
if(run->next != NULL){
run = run->next;
}
else{
if(carry / 10){
run->next = new ListNode(carry/10);
run = run->next;
return mainptr;
}
}
}
carry = carry / 10;
}
return mainptr;
}
private:
int CountList(ListNode *input){
ListNode *temp = input;
int counter = 0;
while(temp!=NULL){
counter ++;
temp = temp->next;
}
return counter;
}
};
链表表示的数字相加
这篇博客讨论了如何使用链表表示的非负整数进行相加操作,通过比较两个链表的长度并从较长的链表开始计算,减少了额外的内存使用。博主提供了C++实现的代码,并给出了若干示例,包括加法结果的链表表示。
800

被折叠的 条评论
为什么被折叠?



