Add Two Numbers 看着简单,其实各种奇葩情况需要考虑。。。

来源:互联网 发布:质量数据分析管理办法 编辑:程序博客网 时间:2024/06/10 06:15
/** * 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) {     int v1,v2,v,a=0;     if(l1==NULL&&l2==NULL)        return NULL;     ListNode *l=new  ListNode(0);//有一个错误就是,头指针不能变,始终指向头部,然后指针用于定位插入位置     //所以建立一个新链表必须要三个指针,头指针,遍历指针,还有新节点的指针     //注意头指针的下一个位置才是真正存数据的     ListNode *p=l;     while(l1&&l2) {        ListNode *node=new  ListNode(0);         v1=l1->val;         v2=l2->val;         v=(v1+v2+a)%10;         a=(v1+v2+a)/10;         l1=l1->next;         l2=l2->next;         node->val=v;         p->next=node;         p=p->next;     }     //没有考虑两个链表长度一样, 出现最后一次相加还有进位 的情况     //没有考虑l1,l2本身大于10的进位情况     //最需要注意的是,关于最后一次进位的条件判断应该放在,所有相同或者不同长度链之后!!    while(l1) {    ListNode *node=new  ListNode(0);    node->val=(l1->val+a)%10;    a=(l1->val+a)/10;    p->next=node;    p=p->next;    l1=l1->next;    }    while(l2){    ListNode *node=new  ListNode(0);    node->val=(l2->val+a)%10;    a=(l2->val+a)/10;    p->next=node;    p=p->next;    l2=l2->next;    }    if(l1==NULL&&l2==NULL&&a!=0)//放最后,以防附加后的链路最后一次还有进位     {       ListNode *node=new  ListNode(a);       p->next=node;     }     return l->next;    }};

0 0
原创粉丝点击