LEETCODE:
题意理解:
也就是给定两个非空链表,然后按照十进制加法处理这两个链表并存入一个新链表中。
先将解题代码放上:
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l3;
ListNode* old;
bool ok = true;
int zero = 0;
while(l1 != NULL || l2 != NULL || zero != 0){
int x = 0;
if(l1 != NULL && l2 != NULL){
x = (l1->val + l2->val + zero)%10 ;
zero = (l1->val + l2->val + zero)/10;
// cout<<x<<endl;
l1 = l1->next;
l2 = l2->next;
}else if(l1 == NULL && l2 != NULL){
x = (l2->val + zero)%10;
zero = (l2->val + zero)/10;
l2 = l2->next;
}else if(l1 != NULL && l2 == NULL){
x = (l1->val + zero)%10;
zero = (l1->val + zero)/10;
l1 = l1->next;
}
else
{
x = zero;
zero = 0;
}
if(ok) {
l3 = new ListNode(x);
ok = false;
old = l3;
}else{
l3->next = new ListNode(x);
l3 = l3->next;
}
}
return old;
}
};
算法:
根据题意,我们可以知道,基本上这道题就是将两个”大“数加在一起,从个位开始按照十进制进位。
所以我们可以取出两个链表相应位值的数字相加,然后用变量zero记录每次的进位,每次使用进位后在计算出进位即可。(参考高精度加法)
解题过程中,各种测试例子基本都会存在,比较典型的是测试进位,l1比l2长,l2比l1长。
所以按照相应情况分类讨论即可。-另一种思路(部分分):
我们可以将两个链表分别化为一个数字,然后让他们想加,再逐个拆分数字存入链表即可。
这样在链表很长的时候就不可行了,因为不存在一种类型能存放100位的整数,但是不失为一个不错的思考方向。