leetcode 445.两数相加II(medium)

题目:给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。(不能对列表中的节点尽心翻转)

示例:   输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)        输出: 7 -> 8 -> 0 -> 7

思路:先将两链表补齐为等长链表,再以递归方式按位进行加和

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
    private:
  //递归函数
    void addlinklist(ListNode *s1,ListNode *s2,int *cout)
    {
        if(s1==NULL&&s2==NULL) return;
        if(s1!=NULL&&s2!=NULL) addlinklist(s1->next,s2->next,cout);
        int sum=s1->val+s2->val+*cout;
        if(sum>=10)
        {*cout=1;s1->val=sum%10;}
        else {*cout=0;s1->val=sum;}
        return;
    }
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //链表补齐
        ListNode *head1=new ListNode(0);
        ListNode *head2=new ListNode(0);
        head1->next=l1;
        head2->next=l2;
        ListNode *p1=head1;
        ListNode *p2=head2;
        while(p1!=NULL&&p2!=NULL)
        {
            p1=p1->next;
            p2=p2->next;
        }
        if(p1==NULL)
        {
            while(p2!=NULL)
            {
                ListNode *temp=new ListNode(0);
                temp->next=head1->next;
                head1->next=temp;
                p2=p2->next;
            }
        }
        if(p2==NULL)
        {
            while(p1!=NULL)
            {
                ListNode *temp=new ListNode(0);
                temp->next=head2->next;
                head2->next=temp;
                p1=p1->next;
            }
        }
        int *cout=new int(0);
        addlinklist(head1,head2,cout);
        if(head1->val==0) return head1->next;
        else return head1;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值