leetcode 2 addtwosum

来源:互联网 发布:淘宝小棉袄衣服 编辑:程序博客网 时间:2024/06/06 20:47


题意:2个链表内容相加,链表数据均为个位数,如果相加超过10,则取余,同时下一节点值进1


此题就是要懂得处理特殊情况,如下:

1. 刚输入的l1、l2头节点有可能是空的

2.l1和l2的长度可能不相等

3.l1比l2长,同时l1的后半段一直是9,即后方会不断进1

4. l1和l2即使都遍历结束了,但因为最后节点相加大于10,故应该再新增加一个节点!




/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {        int sum,add_num=0,num1,num2;    struct ListNode *p1,*p2,*l3,*p3;    l3=(struct ListNode *)malloc(sizeof(struct ListNode));    p3=l3;    p1=l1;p2=l2;        if(l1==NULL)  //这段预防刚输入的l1、l2就是空的        return l2;    else if(l2==NULL)        return l1;        while(1)    {         //如果为空,则置0,否则置其val,处理有一段链表到头了,另一段没到头        if(p1==NULL)              num1=0;        else num1=p1->val;        if(p2==NULL)            num2=0;        else num2=p2->val;                        //相加,取余处理,增值处理        sum=num1+num2+add_num;        p3->val=sum%10;        add_num=sum/10;                        //如果已经是空了,就不继续向下,一样用于处理某链表到头情况        if(p1!=NULL)            p1=p1->next;        if(p2!=NULL)            p2=p2->next;                //当二者一起到头时,说明要结束计算了        if(p1==NULL&&p2==NULL)        {            //查看增值是否为1,若是,还需要在尾端加一个节点,值为1                 if(add_num==1)            {                p3->next=(struct ListNode *)malloc(sizeof(struct ListNode));                p3->next->val=add_num;                p3->next->next=NULL;       //记住,尾节点的next必须要初始化为NULL            }            else p3->next=NULL;                        return l3;        }        //建立新的下一个节点,next记得先设为null        p3->next=(struct ListNode *)malloc(sizeof(struct ListNode));        p3=p3->next;        p3->next=NULL;    }}


0 0