【数据结构与算法】LeetCode每日一题

题目:

解答:

思路第一,什么语言不重要

1.首先,如果是两个正序的,那么我们可以直接两个链表各个位数相加,但是有一个问题,如果有个数是两位数,另一个位是三位数,那个两位数前面就需要一个前导零才能完成相加,例如234跟12这两个数分别相加,如果12前面没有前导0,那么相加就成了234+120了

2.这个题所给题干逆序的,然后输出结果也是逆序的,所以就可以用相加的方法,然后在遍历两个链表的时候,如果有一个链表成了空NULL,那么让另一个链表位数相加就和0相加即可

3.大体思路有了, 但是还有一个问题,就是进位的问题,如果相加>=10的情况下,就需要向前进位,由于两个个位数相加不可能超过20,所以如果有进位则默认为1即可,两数相加时,再加上这个进位即可,有进位则加1,没有则加0

4.如果两个3位数相加变成了4位数,那么就需要在各个位相加完后再进行一次判断,判断是否有进位,如果有进位,则再给新链表加一个空间,把进位值1放进去,放到链表的尾部,因为是逆序,再逆序就变成了头部位

5.两个各位数相加的值为 n1+n2+carry (n1是第一个链表,n2是第二个链表,carry是进位值)

相加完最终给链表的值为n1+n2+carry 再%10 而carry则等于 /10

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *head = NULL, *tail = NULL;
    int carry = 0;
    while (l1 || l2) {
        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;
    }
}
相关推荐
飞机和胖和黄6 分钟前
考研之王道C语言第三周
c语言·数据结构·考研
yyy(十一月限定版)7 分钟前
寒假集训4——二分排序
算法
星火开发设计7 分钟前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识
醉颜凉18 分钟前
【LeetCode】打家劫舍III
c语言·算法·leetcode·树 深度优先搜索·动态规划 二叉树
qq_1777673719 分钟前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
达文汐21 分钟前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
一匹电信狗21 分钟前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
User_芊芊君子21 分钟前
【LeetCode经典题解】搞定二叉树最近公共祖先:递归法+栈存路径法,附代码实现
算法·leetcode·职场和发展
算法_小学生23 分钟前
LeetCode 热题 100(分享最简单易懂的Python代码!)
python·算法·leetcode
执着25923 分钟前
力扣hot100 - 234、回文链表
算法·leetcode·链表