2.两数相加

题目


思路
1.记录返回结构体
2.两个结构体的两位数相加,记录进位
3.位移结构体,赋值
代码

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    
    struct ListNode *p1 = l1;
    struct ListNode *p2 = l2;
    struct ListNode *result = (struct ListNode *)malloc(sizeof(struct ListNode));//设置返回的结构体
    result->val = 0;
    
    struct ListNode *p = NULL;//进度结构体,记录进度
    int c = 0;
    while(p1 != NULL || p2 != NULL || c != 0) {//判断结构体和进位,如果有,继续循环
        if (p == NULL) {
            p = result;
        } else {
            //位移记录结构体
            p->next = (struct ListNode *)malloc(sizeof(struct ListNode));
            p->next->val = 0;
            p = p->next;
        }
        int a = (p1 == NULL ? 0 : p1->val);
        int b = (p2 == NULL ? 0 : p2->val);
        int s = (a + b + c) % 10;//当前结构体值
        c = (a + b + c) / 10;//获取进位
        p->val = s;
        p->next = NULL;
        p1 = (p1 == NULL ? NULL : p1->next);
        p2 = (p2 == NULL ? NULL : p2->next);
    }
    return result;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容