TypeError:object ofthe type ‘ListNode‘ has no len()

leetCode第二题

 最开始我得想法是既然都是逆向的链表,就把他们正过来,按照整型进行运算,然后最后得出结果以后再你想输出就可以了。所以最开始我的代码如下:

 但是提交代码之后发现报错

发现我没有注意到题目中说的链表问题。只是当成了一个普通的列表进行操作。

并且还要注意当位数过多时会有溢出,因此这种方法不可取。

解题方法:
利用链表,按位相加。如果超过10,就进位,留下除以10以后的余数。

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
# 建立一个空链表
    struct ListNode *head = NULL, *tail = NULL;
    int carry = 0;
    while (l1 || l2) {
    #位上有数值就赋值,没有赋值为0.直到没有值为止。
        int n1 = l1 ? l1->val : 0;
        int n2 = l2 ? l2->val : 0;
        int sum = n1 + n2 + carry;
        if (!head) {
        #动态分配内存
            head = tail = malloc(sizeof(struct ListNode));
            tail->val = sum % 10;
            tail->next = NULL;
        } else {
            tail->next = malloc(sizeof(struct ListNode));
            tail->next->val = sum % 10;
            tail = tail->next;
            tail->next = NULL;
        }
        #进位数
        carry = sum / 10;
        if (l1) {
            l1 = l1->next;
        }
        if (l2) {
            l2 = l2->next;
        }
    }
    if (carry > 0) {
        tail->next = malloc(sizeof(struct ListNode));
        tail->next->val = carry;
        tail->next->next = NULL;
    }
    return head;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值