Leetcode Add two numbers链表相加

这里给出别人写的一段代码,很简洁,但是不易理解。。。

ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
        int x=0, y=0, carry=0, sum=0;
        ListNode *h=NULL, **t=&h;

        while (l1!=NULL || l2!=NULL){
            x = getValueAndMoveNext(l1);
            y = getValueAndMoveNext(l2);

            sum = carry + x + y;

            ListNode *node = new ListNode(sum%10);
            *t = node;
            t = (&node->next);

            carry = sum/10;
        }

        if (carry > 0) {
            ListNode *node = new ListNode(carry%10);
            *t = node;
        }

        return h;
    }
    int getValueAndMoveNext(ListNode* &l){
        int x = 0;
        if (l != NULL){
            x = l->val;
            l = l->next;
        }
        return x;
    }

下面给出自己的代码
其结果在最后也就是最高为处有个0,虽然对结果没什么影响,但是并不完美,
希望有懂得朋友给个解决方法

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) :val(x), next(NULL) {};
}; 
ListNode* addTwoNumbers(ListNode* p1, ListNode* p2)
{
    ListNode* result =new ListNode(0);
    ListNode* ptemp = result;
    int carry = 0;
    while (p1!=nullptr||p2!=nullptr)
    {
        int x =p1? p1->val:0;
        int y =p2? p2->val:0;
        int sum = x + y + carry;
        carry = sum % 10;
        ptemp->val=carry;
        ListNode* temp=new ListNode(0);
        ptemp->next = temp;
        ptemp = ptemp->next;
        carry = sum / 10;
        if (p1!=nullptr)
            p1 = p1->next;
        if (p2!=nullptr)
            p2 = p2->next;

    }
    if (carry == 1) 
    {
        ListNode* temp = new ListNode(0);
        temp->val = 1;
        ptemp->next = temp;
    }
    return result;
}


int main()
{
    ListNode* p1 = new ListNode(2);
    ListNode* p2 = new ListNode(4);
    ListNode* p3 = new ListNode(3);
    p1->next = p2;
    p2->next = p3;
    p3->next = nullptr;
    ListNode* p4 = new ListNode(5);
    ListNode* p5 = new ListNode(6);
    ListNode* p6 = new ListNode(4);
    ListNode* p7 = new ListNode(1);
    p4->next = p5;
    p5->next = p6;
    p6->next = p7;
    p7->next = nullptr;
    ListNode* result = addTwoNumbers(p1, p4);
    while (result)
    {
        cout << result->val << endl;
        result=result->next;
    }
    return 0;
}

“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值