您的位置:首页 > 其它

LeetCode2 Add Two Numbers

2015-12-12 21:23 274 查看

题目链接:

https://leetcode.com/problems/add-two-numbers/

题目描述:

给两个链表,代表两个非负数。逆序存储在链表节点中,例如(2 -> 4 -> 3)代表342。

将两个数相加,即两个链表相加。

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

分析:

水题,其实就是链表的大数加法。诶,但是犯了几个小错误。

ptr1->val = (ptr1->val + ptr2->val + num) % 10;
ptr2->val = (ptr1->val + ptr2->val + num) % 10;


这样写是不对的,第一行代码已经将ptr1->val的值改变了,第二行是用改变之后的ptr1->val在计算。

嗯~~~QAQ代码有点冗余,等我考完试再想想能不能改改。T-T

代码:

class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* ptr1=l1;
ListNode* ptr2=l2;
int cnt=0;
int num=0;
ListNode* ptr1_pre=l1;
ListNode* ptr2_pre=l2;
while(ptr1 && ptr2){
num=cnt;
cnt=(ptr1->val+ptr2->val+cnt)/10;
int val1=(ptr1->val+ptr2->val+num)%10;
int val2=(ptr1->val+ptr2->val+num)%10;
ptr1->val=val1;
ptr2->val=val2;
ptr1_pre=ptr1;
ptr2_pre=ptr2;
ptr1=ptr1->next;
ptr2=ptr2->next;
}
if(ptr1){
while(ptr1){
if(cnt){
num=cnt;
cnt=(ptr1->val+cnt)/10;
ptr1->val=(ptr1->val+num)%10;
}
ptr1_pre=ptr1;
ptr1=ptr1->next;
}
if(cnt){
ListNode* pNew=(ListNode*)malloc(sizeof(ListNode));
pNew->val=cnt;
pNew->next=NULL;
ptr1_pre->next=pNew;
}
return l1;
}
else if(ptr2){
while(ptr2){
if(cnt){
num=cnt;
cnt=(ptr2->val+cnt)/10;
ptr2->val=(ptr2->val+num)%10;
}
ptr2_pre=ptr2;
ptr2=ptr2->next;
}
if(cnt){
ListNode* pNew=(ListNode*)malloc(sizeof(ListNode));
pNew->val=cnt;
pNew->next=NULL;
ptr2_pre->next=pNew;
}
return l2;
}
else{
if(cnt){
ListNode* pNew=(ListNode*)malloc(sizeof(ListNode));
pNew->val=cnt;
pNew->next=NULL;
ptr1_pre->next=pNew;
}
return l1;
}

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 2 链表