lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

1. 题目

 

 

 

 https://leetcode.cn/problems/add-two-numbers/

 

 

2. 解法

 

解答思路。

为了解决这个问题,我们需要模拟两数相加的过程,从低位到高位,逐位相加,并考虑进位的情况。我们可以使用以下的步骤:

  1. 创建一个虚拟头节点,它不存储任何值,只是为了方便返回结果链表的头节点。
  2. 创建一个当前节点指针,指向虚拟头节点。
  3. 创建一个进位标志,初始为0。
  4. 遍历两个链表,直到两个链表都遍历完毕。
    • 取出两个链表中对应位置的值,如果某个链表为空,则取0。
    • 将这两个值加上进位标志,得到当前位的和。
    • 用除以10的商来更新进位标志,用余数来创建一个新节点,存储当前位的值。
    • 将当前节点指针的下一个节点指向这个新节点,并将当前节点指针移动到下一个节点。
  5. 如果最后还有进位,创建一个新节点,存储进位值,并将当前节点指针的下一个节点指向这个新节点。
  6. 返回虚拟头节点的下一个节点,即结果链表的头节点。

这样,我们就完成了两数相加的问题。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
 
    int carry = 0;
    StringBuilder sb = new StringBuilder();
    ListNode dummy = new ListNode(-1);
    ListNode curr = dummy;
    while (l1 != null || l2 != null || carry != 0) {
        int sum = carry;
        if (l1 != null) {
            sum += l1.val;
            l1 = l1.next;
        }
        if (l2 != null) {
            sum += l2.val;
            l2 = l2.next;
        }
        curr.next = new ListNode(sum % 10);
        curr = curr.next;
        carry = sum / 10;
 
    }
    return dummy.next;
 
}

  

3. 总结

posted on   白露~  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示