您的位置:首页 > 其它

LeetCode:Add Two Numbers

2014-03-24 00:05 239 查看
这题可以说是花了我很久的一道题,说实话感觉以前链表知识学得很好,但是实际动手起来就会发现其实自己有很多问题不懂。比如链表指针再动的时候,没有加另外再赋值一个头指针,不这样在单链表里就没办法找到原来的头指针。再比如,用pushBack方法压入数据是,链表的指针应该再移一位。作为一个大三的学生了,现在才会利用好链表觉得还是满惭愧的。

这道题我本来是想把l1和l2的数据先表示出来再求和,再把和存到链表里,发现和一旦很大以后就会出现莫名其妙的结果,看来用链表存储大数据是有道理的!

最近没有更新,是我弟弟来武汉看樱花了,据说今天来武大看樱花的人数过10万了,唉真心伤不起。每天看到学校人多暴了,都不太想出门了。

还是要好好学好数据结构和算法,最近越来越有这种感触了。

/**
* 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) {
if(l1==NULL)return l2;
if(l2==NULL)return l1;
int flag=0;//进位标志
int sum=0;
int current=0;
int quo=0;
int tmp;
ListNode *l3=NULL;
ListNode *ans=NULL;
while(l1!=NULL&&l2!=NULL){ //l1,l2链表均不为空
tmp=l1->val+l2->val+ flag;
flag=tmp/10;
current=tmp%10;
if(l3==NULL){ //l3为空时赋初值
l3=new ListNode(current);
ans=l3;
}
else{
l3=pushBack(l3,current); //不空,L3压入currenr,!!且l3指向下一节点!!
}
l1=l1->next;
l2=l2->next;
}
while(l1!=NULL){ //l2为空l1不为空
tmp=l1->val+ flag;
flag=tmp/10;
current=tmp%10;
l3=pushBack(l3,current);
l1=l1->next;
}
while(l2!=NULL){
tmp=l2->val+ flag;
flag=tmp/10;
current=tmp%10;
l3=pushBack(l3,current);
l2=l2->next;
}
if(l1==NULL&&l2==NULL&&flag==1) //若两者之和还有进位
l3=pushBack(l3,1);

return ans;
}

ListNode * pushBack(ListNode * last, int val) { //模拟C++的pushBack方法
ListNode * l = new ListNode(val);
last->next = l;
return l;
}
};

/*int main(){
ListNode *l2=new ListNode(1);
ListNode * l = new ListNode(9);
l2->next = l;
ListNode * l4 = new ListNode(9);
l->next = l4;
ListNode * l5 = new ListNode(9);
l4->next = l5;
ListNode * l6 = new ListNode(9);
l5->next = l6;
ListNode * l7 = new ListNode(9);
l6->next = l7;
ListNode * l8 = new ListNode(9);
l7->next = l8;
ListNode * l9 = new ListNode(9);
l8->next = l9;
ListNode * l20 = new ListNode(9);
l9->next = l20;
ListNode * l21 = new ListNode(9);
l20->next = l21;
ListNode * l22 = new ListNode(9);
l21->next = l22;
ListNode *l1=new ListNode(9);
Solution Test;
ListNode *l3=Test.addTwoNumbers(l1,l2);
while(l3!=NULL){
cout<<l3->val;
l3=l3->next;

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