Add Two Numbers

题目:

给两个单链表代表两个非负数字,每个数字都是逆序存储,并且单链表每个节点存储一个数(0-9),将这两个数相加,返回一个链表

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

分析:

遍历两个链表,从链表中分别取出数字,相加,如果大于等于10则进一位,十位数也是,如果十位数也大于等于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) {
        
        ListNode *ret, *s, *p, *t, *q;
        ret = (ListNode *)malloc(sizeof(ListNode));
        ret->next = NULL;
        p = ret;
        t = l1;
        q = l2;
        int temp = 0, up = 0, real = 0;
        while(t != NULL && q != NULL){
            
            temp = t->val + q->val + up;
            if(temp < 10){
                real = temp;
                up = 0;
            }else{
                real = temp%10;
                up = 1;
            }

            s = (ListNode *)malloc(sizeof(ListNode));
            s->val = real;
            s->next = NULL;

            p->next = s;
            p = s;

            t = t->next;
            q = q->next;
        }
        
        
        while(t != NULL){
            s = (ListNode *)malloc(sizeof(ListNode));
            temp = t->val + up;
            if(temp < 10){
                real = temp;
                up = 0;
            }else{
                real = temp%10;
                up = 1;
            }
            
            s->val = real;
            s->next = NULL;

            p->next = s;
            p = s;
            t = t->next;
        }

        while(q != NULL){
            s = (ListNode *)malloc(sizeof(ListNode));
            temp = q->val + up;
            if(temp < 10){
                real = temp;
                up = 0;
            }else{
                real = temp%10;
                up = 1;
            }
            
            s->val = real;
            s->next = NULL;

            p->next = s;
            p = s;
            q = q->next;
        }
    
        if(t == NULL && q == NULL && up == 1){
            s = (ListNode *)malloc(sizeof(ListNode));
            s->val = up;
            s->next = NULL;
            
            p->next = s;
            p = s;
        }


        return ret->next;
    }
};



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值