首页 > 其他分享 >【leetcode】2. 两数相加

【leetcode】2. 两数相加

时间:2024-09-26 17:20:47浏览次数:3  
标签:ListNode struct val 相加 next l2 l1 leetcode

 

 总体思路:

1.将两个链表里的数字相加:总左往右加,存入第三方链表L3里;

2.设置一个进位符 t,用来存储每位相加的进位信息;

3.对多出来单独的链表进行处理(只需考虑进位),接入到L3的后面。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *l3 = (struct ListNode*)malloc(sizeof(struct ListNode)),
                    *head = (struct ListNode*)malloc(sizeof(struct ListNode));
    int t = 0, m = 0;
    l3->val = 0;
    l3->next = NULL;
    head = l3;
    while (l1 != NULL && l2 != NULL) {
        struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode));
        p->val = ((l1->val + l2->val) + t) % 10;
        p->next = NULL;
        l3->next = p;
        l3 = p;
        t = (l1->val + l2->val + t) / 10;
        l1 = l1->next;
        l2 = l2->next;
    }
    if (l1 != NULL) {
        l3->next = l1;
        m = t;
        while ((l1->val + t) && l1->next != NULL) {
            m = t;
            t = (l1->val + t) / 10;
            l1->val = (l1->val + m) % 10;
            l1 = l1->next;
        }
        if ((l1->val + t) / 10 == 1) {
            struct ListNode* p =
                (struct ListNode*)malloc(sizeof(struct ListNode));
            p->val = 1;
            p->next = NULL;
            l1->val = (l1->val + t) % 10;
            l1->next = p;
        } else if (t == 0 && m == 1) {
            struct ListNode* p =
                (struct ListNode*)malloc(sizeof(struct ListNode));
            l1->val = l1->val + t;
        } else {
            struct ListNode* p =
                (struct ListNode*)malloc(sizeof(struct ListNode));
            l1->val = l1->val + t;
        }
    } else if (l2 != NULL) {
        l3->next = l2;
        m = t;
        while ((l2->val + t) && l2->next != NULL) {
            m = t;
            t = (l2->val + t) / 10;
            l2->val = (l2->val + m) % 10;
            l2 = l2->next;
        }
        if ((l2->val + t) / 10 == 1) {
            struct ListNode* p =
                (struct ListNode*)malloc(sizeof(struct ListNode));
            p->val = 1;
            p->next = NULL;
            l2->val = (l2->val + t) % 10;
            l2->next = p;
        } else {
            struct ListNode* p =
                (struct ListNode*)malloc(sizeof(struct ListNode));
            l2->val = l2->val + t;
        }
    } else {
        if (t == 1) {
            struct ListNode* p =
                (struct ListNode*)malloc(sizeof(struct ListNode));
            p->val = 1;
            p->next = NULL;
            l3->next = p;
        }
    }
    head = head->next;
    return head;
}

标签:ListNode,struct,val,相加,next,l2,l1,leetcode
From: https://blog.csdn.net/m0_74054477/article/details/142566663

相关文章

  • 【LeetCode Hot 100】20. 有效的括号
    题目描述这个题目在讲解栈的应用的时候是常用的例子,在遍历括号串的时候维护一个栈结构,如果当前字符是前括号,暂时没有与之配对的后括号,则先将其压入栈中。C++STL和Java都提供了对应的容器,但是由于我们知道栈的大小不可能超过括号串的长度,所以也可以手动用数组模拟,这样运行速度可......
  • leetcode每日一题day15(24.9.25)——公司命名
    思路:首先如果没有相同的后缀,则无论只要不是相同的首字母交换都不会出现重复情况,如果有重复后缀,则还需多增加个不能和,首字符与另一相同后缀字串的首字符相同的字串交换。主要矛盾已经明确,则可对矛盾进行分析。首先把范围缩小到只有两种不同首字母,对于这种情况      ......
  • Leetcode 622. 设计循环队列
    1.题目基本信息1.1.题目描述设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列......
  • Leetcode 706. 设计哈希映射
    1.题目基本信息1.1.题目描述不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现MyHashMap类:MyHashMap()用空映射初始化对象voidput(intkey,intvalue)向HashMap插入一个键值对(key,value)。如果key已经存在于映射中,则更新其对应的值value。intget(in......
  • 【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“
    【算法题】63.不同路径II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“1.题目下方是力扣官方题目的地址63.不同路径II一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格......
  • 【LeetCode Hot 100】19. 删除链表的倒数第N个结点
    题目描述由于单向链表只能从头往后遍历,所以无法向数组那样的随机存取结构一样进行下标运算,也无法从链表尾向前数n个结点。本题有两个思路,个人觉得都比较简单。可以先遍历一遍链表得到链表的长度len,然后再从头往后数len-n个结点就是所求结点。可以使用快慢指针,快指针先移动n......
  • Leetcode 626-换座位题目解析
    1.题目编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。 2.数据准备CreatetableIfNotExistsSeat(idint,studentvarchar(255));TruncatetableSeat;insertintoSeat(id,student)v......
  • Leetcode 1472. 设计浏览器历史记录
    1.题目基本信息1.1.题目描述你有一个只支持单个标签页的浏览器,最开始你浏览的网页是homepage,你可以访问其他的网站url,也可以在浏览历史中后退steps步或前进steps步。请你实现BrowserHistory类:BrowserHistory(stringhomepage),用homepage初始化浏览器类。void......
  • Leetcode 1396. 设计地铁系统
    1.题目基本信息1.1.题目描述地铁系统跟踪不同车站之间的乘客出行时间,并使用这一数据来计算从一站到另一站的平均时间。实现UndergroundSystem类:voidcheckIn(intid,stringstationName,intt)通行卡ID等于id的乘客,在时间t,从stationName站进入乘客一次只......
  • 计算机低能儿从0刷leetcode | 17.电话号码的数字组合 | 回溯思想
    题目:17.电话号码的字母组合解答:看题解学习到这种思想叫做回溯法,学习了一下,这是建立在DFS的基础上搜索思路,还分为递归式回溯以及非递归式回溯,这道题使用的是递归回溯。递归回溯的大致框架如下:voidDFS(inti){//搜索第i层   if(i>n){//搜索结束       ......